Node.js:fs.createReadStreamでファイルを行単位で処理する方法
Node.jsでファイルを読み込み、行ごとに処理する方法
fs.readFileSync と split
最も簡単な方法は、fs.readFileSync
を使ってファイル内容をすべて読み込み、split
を使って行に分割する方法です。
const fs = require('fs');
const filePath = './test.txt';
const content = fs.readFileSync(filePath, 'utf8');
const lines = content.split('\n');
lines.forEach(line => {
console.log(line);
});
この方法はシンプルで分かりやすいですが、ファイル全体をメモリに読み込むため、大きなファイルの場合、メモリ使用量が多くなる可能性があります。
fs.createReadStream
大きなファイルの場合、fs.createReadStream
を使ってファイルを読み込み、ストリームごとに処理する方法が効率的です。
const fs = require('fs');
const filePath = './test.txt';
const readStream = fs.createReadStream(filePath, { encoding: 'utf8' });
readStream.on('data', (chunk) => {
const lines = chunk.split('\n');
lines.forEach(line => {
console.log(line);
});
});
この方法は、ファイル全体をメモリに読み込むことなく、行ごとに処理することができます。
readline
モジュールを使うと、より簡単にファイルを読み込み、行ごとに処理することができます。
const readline = require('readline');
const filePath = './test.txt';
const reader = readline.createInterface({
input: fs.createReadStream(filePath, { encoding: 'utf8' }),
});
reader.on('line', (line) => {
console.log(line);
});
この方法は、fs.createReadStream
を使う方法よりもコードがシンプルで分かりやすいです。
Node.jsでファイルを読み込み、行ごとに処理するには、いくつかの方法があります。 それぞれの特徴を理解し、状況に合わせて最適な方法を選びましょう。
fs.readFileSync
const fs = require('fs');
const filePath = './test.txt';
const content = fs.readFileSync(filePath, 'utf8');
const lines = content.split('\n');
lines.forEach(line => {
console.log(line);
});
fs.createReadStream
const fs = require('fs');
const filePath = './test.txt';
const readStream = fs.createReadStream(filePath, { encoding: 'utf8' });
readStream.on('data', (chunk) => {
const lines = chunk.split('\n');
lines.forEach(line => {
console.log(line);
});
});
readlineモジュール
const readline = require('readline');
const filePath = './test.txt';
const reader = readline.createInterface({
input: fs.createReadStream(filePath, { encoding: 'utf8' }),
});
reader.on('line', (line) => {
console.log(line);
});
各コードの説明
filePath
: 処理対象のファイルパスcontent
: ファイル内容lines
: ファイル内容を分割した行の配列chunk
: ストリームで読み込んだデータの塊
実行方法
- 上記のコードをファイルに保存します。
- ファイルを保存したディレクトリで、以下のコマンドを実行します。
node ファイル名.js
出力例
行1
行2
行3
...
注意事項
- 上記のコードは、UTF-8エンコードのファイルを読み込むことを想定しています。
- ファイルが存在しない場合、エラーが発生します。
Node.jsでファイルを読み込み、行ごとに処理するその他の方法
async
/await
を使って、コードをより簡潔に書くことができます。
const fs = require('fs');
const filePath = './test.txt';
async function readFile() {
const content = await fs.promises.readFile(filePath, 'utf8');
const lines = content.split('\n');
lines.forEach(line => {
console.log(line);
});
}
readFile();
const fs = require('fs');
const filePath = './test.txt';
function readFile() {
const reader = fs.createReadStream(filePath, { encoding: 'utf8' });
for await (const chunk of reader) {
const lines = chunk.split('\n');
lines.forEach(line => {
console.log(line);
});
}
}
readFile();
これらのライブラリを使うと、より複雑な処理を簡単に実行することができます。
javascript node.js file-io