Node.jsにおけるファイル操作:テキストファイルの読み込みと配列への格納
Node.js でテキストファイルを配列に読み込む方法
以下、その方法を2通りご紹介します。
fs.readFileSyncを使う方法
この方法は、ファイルを一度にすべて読み込み、配列に格納します。 コードは以下のようになります。
const fs = require('fs');
const filePath = 'path/to/your/file.txt';
const fileContent = fs.readFileSync(filePath, 'utf8');
const lines = fileContent.split('\n');
console.log(lines);
このコードは以下の処理を行います。
fs
モジュールをrequireします。- 読み込むファイルのパスを
filePath
変数に格納します。 fs.readFileSync
を使用して、ファイルを同期的に読み込みます。エンコーディングはutf8
を指定します。fileContent
を改行('\n')で分割し、配列lines
に格納します。lines
の内容をコンソールに出力します。
ポイント
- この方法は、ファイルが小さい場合に適しています。
- ファイルが大きい場合や、メモリ使用量を抑えたい場合は、次の方法を使用することをおすすめします。
fs.createReadStreamとreadlineを使う方法
const fs = require('fs');
const readline = require('readline');
const filePath = 'path/to/your/file.txt';
const lines = [];
const rl = readline.createInterface({
input: fs.createReadStream(filePath),
});
rl.on('line', (line) => {
lines.push(line);
});
rl.on('close', () => {
console.log(lines);
});
- 空の配列
lines
を作成します。 readline.createInterface
を使用して、rl
という readline インターフェースを作成します。rl.on('line')
イベントリスナーを定義します。このイベントリスナーは、ファイルから1行読み込まれるたびに呼び出されます。- イベントリスナー内で、読み込まれた行を
lines
配列に追加します。
- この方法は、ファイルが大きい場合や、メモリ使用量を抑えたい場合に適しています。
- ファイルの読み込みが完了した後に、
lines
配列に対して処理を行うことができます。
- 上記のコードは、UTF-8 エンコーディングのテキストファイルを読み込むことを前提としています。
- 異なるエンコーディングのファイルを読み込む場合は、
fs.readFileSync
またはfs.createReadStream
のオプションでエンコーディングを指定する必要があります。 - ファイルが存在しない場合や、読み込みに失敗した場合には、エラー処理を行う必要があります。
Node.js でテキストファイルを配列に読み込む サンプルコード
fs.readFileSyncを使う方法
const fs = require('fs');
const filePath = 'sample.txt';
const fileContent = fs.readFileSync(filePath, 'utf8');
const lines = fileContent.split('\n');
console.log(lines);
fs.createReadStreamとreadlineを使う方法
const fs = require('fs');
const readline = require('readline');
const filePath = 'sample.txt';
const lines = [];
const rl = readline.createInterface({
input: fs.createReadStream(filePath),
});
rl.on('line', (line) => {
lines.push(line);
});
rl.on('close', () => {
console.log(lines);
});
このコードは、sample.txt
というファイルを1行ずつ読み込み、配列lines
に格納し、コンソールに出力します。
補足
- 上記のコードは、Node.js 16.14.0 で動作確認しています。
- ファイルパスは、ご自身の環境に合わせて変更してください。
- ファイルの内容は、以下のようになっています。
line1
line2
line3
- 出力は以下のようになります。
[ 'line1', 'line2', 'line3' ]
注意事項
- ファイルが大きい場合は、
fs.createReadStream
とreadline
を使う方法の方が効率的に読み込むことができます。
Node.js でテキストファイルを配列に読み込む その他の方法
Promise.allとmapを使う方法
この方法は、Promise APIを使用して、ファイルを非同期的に読み込みます。 コードは以下のようになります。
const fs = require('fs');
const filePath = 'path/to/your/file.txt';
fs.promises.readFile(filePath, 'utf8')
.then((fileContent) => {
const lines = fileContent.split('\n');
return lines;
})
.then((lines) => {
console.log(lines);
})
.catch((err) => {
console.error(err);
});
fs.promises.readFile
を使用して、ファイルを非同期的に読み込みます。- ファイルの内容をPromiseで返します。
- Promiseがresolveされると、
then
ハンドラーが呼び出されます。 then
ハンドラー内で、ファイルの内容を改行で分割し、配列lines
に格納します。catch
ハンドラー内で、エラーを出力します。
- この方法は、非同期処理をわかりやすく記述することができます。
- エラー処理を容易に行うことができます。
async/awaitを使う方法
この方法は、非同期処理をより簡潔に記述することができます。 コードは以下のようになります。
const fs = require('fs');
const filePath = 'path/to/your/file.txt';
(async () => {
const fileContent = await fs.promises.readFile(filePath, 'utf8');
const lines = fileContent.split('\n');
console.log(lines);
})();
async
関数を使用します。await
を使用して、fs.promises.readFile
の非同期処理を実行します。
- この方法は、
async/await
構文を使用して、非同期処理をより簡潔に記述することができます。 - コードが読みやすくなり、メンテナンス性も向上します。
モジュールを使う方法
Node.js には、テキストファイルを扱うためのモジュールがいくつか用意されています。以下、いくつか例を挙げます。
これらのモジュールを使用すると、より柔軟にテキストファイルを処理することができます。
上記以外にも、様々な方法でNode.js でテキストファイルを配列に読み込むことができます。ご自身の目的に合った方法を選択してください。
javascript node.js