Node.js でファイル内容を取得するサンプルコード
Node.js の fs.readFile でファイルデータを取得する方法
非同期処理によるファイル読み込み
fs.readFile
は非同期処理で動作します。つまり、ファイル読み込みが完了する前に後続の処理を実行することができます。
const fs = require('fs');
const filePath = './data.txt';
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});
上記のコードでは、fs.readFile
関数が以下の引数を受け取ります。
filePath
: 読み込むファイルのパスencoding
: ファイル内容のエンコーディングcallback
: ファイル読み込み完了後に実行される関数
callback
関数は、2つの引数を受け取ります。
err
: エラーオブジェクト (エラー発生時にのみ設定)data
: 読み込まれたファイル内容
ファイル読み込みが完了すると、callback
関数が呼び出され、data
変数にファイル内容が格納されます。
同期処理によるファイル読み込み
fs.readFileSync
関数は、ファイル内容を同期的に読み込みます。つまり、ファイル読み込みが完了するまで後続の処理は実行されません。
const fs = require('fs');
const filePath = './data.txt';
const data = fs.readFileSync(filePath, 'utf8');
console.log(data);
ファイル読み込みが完了すると、ファイル内容が data
変数に格納されます。
オプションの指定
fs.readFile
関数には、オプションを指定することができます。
const fs = require('fs');
const filePath = './data.txt';
const options = {
flag: 'r',
encoding: 'utf8',
};
fs.readFile(filePath, options, (err, data) => {
// ...
});
options
オブジェクトには、以下のプロパティを設定することができます。
flag
: ファイルを開くフラグ
まとめ
fs.readFile
関数は、Node.js でファイル内容を取得するために使用される重要な関数です。非同期処理と同期処理のどちらを選択するかは、プログラムの設計によって異なります。
テキストファイルを読み込む
const fs = require('fs');
const filePath = './data.txt';
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});
このコードは、data.txt
というテキストファイルを読み込み、その内容をコンソールに出力します。
const fs = require('fs');
const filePath = './data.json';
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
console.error(err);
return;
}
const jsonData = JSON.parse(data);
console.log(jsonData);
});
const fs = require('fs');
const filePath = './image.png';
fs.readFile(filePath, (err, data) => {
if (err) {
console.error(err);
return;
}
// 画像データ処理
console.log('画像データを取得しました');
});
このコードは、image.png
という画像ファイルを読み込み、その内容をバッファとして取得します。その後、画像データ処理を行うことができます。
オプションの指定
const fs = require('fs');
const filePath = './data.txt';
const options = {
flag: 'r',
encoding: 'utf8',
};
fs.readFile(filePath, options, (err, data) => {
// ...
});
このコードは、options
オブジェクトを使用して、ファイルを開くフラグとファイル内容のエンコーディングを指定しています。
同期処理によるファイル読み込み
const fs = require('fs');
const filePath = './data.txt';
const data = fs.readFileSync(filePath, 'utf8');
console.log(data);
このコードは、fs.readFileSync
関数を使用して、data.txt
ファイルを同期的に読み込み、その内容を data
変数に格納します。
これらのサンプルコードを参考に、fs.readFile
関数を使用してファイル内容を取得してみてください。
fs.readFile 以外のファイル読み込み方法
fs.promises.readFile
関数は、fs.readFile
関数の非同期処理版です。Promise を使用して、ファイル読み込み完了を処理することができます。
const fs = require('fs').promises;
const filePath = './data.txt';
fs.readFile(filePath, 'utf8')
.then((data) => {
console.log(data);
})
.catch((err) => {
console.error(err);
});
ストリーム
Node.js は、ファイル内容をストリームとして読み込む機能を提供します。ストリームを使用すると、ファイル内容を逐次的に処理することができます。
const fs = require('fs');
const filePath = './data.txt';
const readStream = fs.createReadStream(filePath, { encoding: 'utf8' });
readStream.on('data', (chunk) => {
console.log(chunk);
});
readStream.on('end', () => {
console.log('ファイル読み込み完了');
});
readline
モジュールは、ファイル内容を一行ずつ読み込む機能を提供します。
const readline = require('readline');
const filePath = './data.txt';
const rl = readline.createInterface({
input: fs.createReadStream(filePath),
crlfDelay: Infinity,
});
rl.on('line', (line) => {
console.log(line);
});
rl.on('close', () => {
console.log('ファイル読み込み完了');
});
サードパーティライブラリ
fs-extra
や read-file-stream
などのサードパーティライブラリを使用して、ファイル内容を取得することができます。
これらのライブラリは、fs
モジュールよりも多くの機能を提供する場合があります。
- ファイルサイズ
- 処理速度
- 必要な機能
ファイルサイズが小さく、処理速度を重視する場合は、fs.readFile
関数を使用するのが一般的です。
ファイルサイズが大きい場合や、逐次的な処理が必要な場合は、ストリームを使用する方が効率的です。
特定の機能が必要な場合は、サードパーティライブラリを使用するのが便利です。
javascript node.js