【保存版】Node.jsファイル操作:読み込み、書き込み、削除完全ガイド
Node.jsを使ってテキストファイルを読み込む
fs.readFileSync
は、ファイルを同期的に読み込む関数です。同期処理なので、関数が終了するまで他の処理は実行されません。
const fs = require('fs');
try {
const data = fs.readFileSync('text.txt', 'utf8');
console.log(data);
} catch (err) {
console.error(err);
}
このコードは、text.txt
ファイルをutf8
エンコーディングで読み込み、その内容をコンソールに出力します。
const fs = require('fs');
fs.readFile('text.txt', 'utf8', (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});
このコードは、text.txt
ファイルをutf8
エンコーディングで読み込み、その内容をコンソールに出力します。エラーが発生した場合は、console.error
でエラーメッセージを出力します。
ファイルの読み込み方を選ぶ際は、以下の点に注意しましょう。
- ファイルサイズ: 小さなファイルの場合は、
fs.readFileSync
の方がシンプルで書きやすいです。 - 処理速度: 大きなファイルの場合は、
fs.readFile
の方が処理速度が速くなります。 - エラー処理: エラー処理が必要な場合は、
fs.readFile
の方が適切です。
- ファイルのエンコーディングを指定する場合は、
utf8
以外にも'latin1'
や'shift-jis'
などのエンコーディングを指定できます。 - ファイルパスは、絶対パスまたは相対パスを指定できます。
- 読み込んだテキストを加工したい場合は、
data
変数を使って自由に処理できます。
fs.readFileSyncを使う
const fs = require('fs');
try {
const data = fs.readFileSync('text.txt', 'utf8');
console.log(data);
} catch (err) {
console.error(err);
}
const fs = require('fs');
fs.readFile('text.txt', 'utf8', (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});
説明
- 上記のコードは、
text.txt
という名前のテキストファイルをカレントディレクトリから読み込みます。 - ファイルが見つからない場合や、読み込みに失敗した場合には、エラーメッセージを出力します。
- ファイルの内容は、コンソールに出力されます。
使い方
上記のコードを保存して、node
コマンドで実行することができます。
node sample.js
補足
- ファイルパスは、必要に応じて変更してください。
Node.jsでテキストファイルを読み込むその他の方法
readline
モジュールは、テキストファイルを1行ずつ読み込むためのモジュールです。大規模なファイルを扱う場合や、逐次処理が必要な場合に有効です。
const fs = require('fs');
const readline = require('readline');
const stream = fs.createReadStream('text.txt');
const reader = readline.createInterface({
input: stream
});
reader.on('line', (line) => {
console.log(line);
});
reader.on('close', () => {
console.log('ファイルの読み込みが完了しました。');
});
利点:
- 大規模なファイルを効率的に処理できる
- メモリ使用量が少ない
- 逐次処理に適している
注意点:
- 1行ずつ読み込むため、全体像を把握しにくい場合がある
stream
モジュールは、データの入出力を行うためのモジュールです。柔軟性と汎用性に優れていますが、やや複雑なコードになる可能性があります。
const fs = require('fs');
const stream = fs.createReadStream('text.txt');
stream.on('data', (chunk) => {
console.log(chunk.toString());
});
stream.on('end', () => {
console.log('ファイルの読み込みが完了しました。');
});
- 柔軟性と汎用性が高い
- さまざまな種類のデータ処理に適用できる
- コードが複雑になりやすい
- エラー処理が複雑になる場合がある
サードパーティ製のライブラリを使う
Promiseやasync/awaitを利用したライブラリなど、様々なサードパーティ製のライブラリが提供されています。使いやすさや機能性によって、それぞれ利点と欠点があります。
- 使いやすい場合がある
- 追加機能が提供されている場合がある
- ライブラリの導入とメンテナンスが必要
- 標準ライブラリよりも動作が遅い場合がある
最適な方法の選び方
使用するファイルのサイズ、処理速度、必要な機能などを考慮して、最適な方法を選択することが重要です。
- 大規模なファイル: 大規模なファイルの場合は、
readline
モジュールまたはstream
モジュールの使用を検討しましょう。 - 柔軟性: 柔軟性と汎用性を求める場合は、
stream
モジュールまたはサードパーティ製のライブラリが適しています。 - 使いやすさ: 使いやすさを重視する場合は、サードパーティ製のライブラリがおすすめです。
javascript node.js