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('ファイルが作成されました');
}
});
ストリーム
当初、ストリームを使う理由が分からなかったのですが、ストリームだとデータを必要な分だけ受け取ることができるようになるため、メモリを多く使わずに済むそうです。
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ファイルも大きくなく、この程度のファイルならばスピードに大きな違いはありませんでした。
ですが、これが大規模な開発になると違いが出てくると思われます。