47
52

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Node.jsのfsモジュールの使い方

Last updated at Posted at 2019-11-27

#fsモジュールとは
fsモジュールはファイルを扱うためのモジュールで、ファイルから書き出したり、ファイルに書き込んだりするときに役立ちます。
Node.jsがはじめから提供しているモジュールなので、Node.jsのインストールがしてあれば、fsモジュールのインストールの必要はありません。

##ファイルの読み込み

const fs = require('fs');

//fs.readFileSync(ファイルのパス, 文字コード, コールバック関数)
fs.readFileSync('./text.txt', utf-8, (err, data) => {
//dataがファイルの中身、errは読み込み時のエラー
  if(data) {
    console.log(data);
  } else {
    console.log(err);
  }
});

##ファイルへの新規書き込み

const fs = require('fs');

//fs.writeFileSync(ファイルのパス, 書き込む文字, 文字コード, コールバック関数)
fs.writeFileSync('./text.txt', "こんにちは", utf-8, (err) => {
  if(err) {
    console.log(err);
  }
});

##ファイルへの追加書き込み

const fs = require('fs');

//fs.appendFileSync(ファイルのパス, 書き込む文字, 文字コード, コールバック関数)
fs.appendFileSync('./text.txt', "こんにちは", utf-8, (err) => {
  if(err) {
    console.log(err);
  }
});

##ファイルの削除

index.js
const fs = require('fs');

//fs.unlink(ファイルのパス, コールバック関数)
fs.unlink(process.argv[2], (err) => {
  if (err) {
    console.error(err);
  } else {
    console.log('削除が終わりました');
  }
});

process.arg[2]はコマンドの第三引数を指すので、以下のようにファイルをコマンドの第三引数に書き、ファイルの実行を行います。

console
$ node index.js ./text.txt

##ファイルの作成

const fs = require('fs');

//fs.open(新規作成ファイルのパス, 書き込む文字, コールバック関数)
fs.open('./text.txt', 'こんにちは', (err) => {
  if(err) {
    console.log(err);
  } else {
    console.log('ファイルが作成されました');
  }
});

##ストリーム
当初、ストリームを使う理由が分からなかったのですが、ストリームだとデータを必要な分だけ受け取ることができるようになるため、メモリを多く使わずに済むそうです。

参考:Node.js Stream を使いこなす

const fs = require('fs')

//読み込みストリームを作成
const rs = fs.createReadStream('./text.html');
//dataイベントが発生したら(データを受け取ったら)、chunkに'./text.html'のデータが入ります。
rs.on('data', (chunk) => {
  res.write(chunk)
});

#####普通のファイル読み込みで同じ処理をしてみると、
readFileSyncだと、同期的な読み込みになるため、すごく読み込みが遅いです。
そのため、readFileで非同期的な読み込みをしています。

const fs = require('fs');

//fs.readFile(ファイルのパス, コールバック関数)
fs.readFile('./text.html', (err, data) => {
//dataがファイルの中身、errは読み込み時のエラー
  if(data) {
    res.write(data);
  } else {
    console.log(err);
  }
});

今回は、./text.htmlファイルも大きくなく、この程度のファイルならばスピードに大きな違いはありませんでした。
ですが、これが大規模な開発になると違いが出てくると思われます。

47
52
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
52

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?