Node.js でファイルを読み取る

Shraddha Paghdar 2023年10月12日
Node.js でファイルを読み取る

この短い記事では、Node.js でファイルを読み取る方法を学びます。

Node.js でファイルを読み取る

fs モジュールは、ファイル システムにアクセスして対話するための多くの便利な機能を提供します。 fs モジュールの特別な機能は、すべてのメソッドがデフォルトで非同期ですが、sync を追加することで同期的にも機能することです。

fs.readFile() を使用して、Node.js でファイルを読み取ります。 ファイル データまたはエラーを呼び出すには、ファイル パス、エンコーディング、およびコールバック関数を渡す必要があります。

fs.readFile() メソッドは、ファイルを読み取るために使用される組み込みメソッドです。 ファイル全体をバッファに読み込みます。 const fs = require('fs') のように require() メソッドを使ってモジュールをロードします。

構文:

fs.readFile(filename, encoding, callbackFn)

このメソッドは 3つのパラメーターを受け入れます。

  1. filename - この必須パラメーターは、読み取るファイルの名前、または別の場所に保存されている場合はパス全体を保持します。
  2. encoding - このパラメータは、ファイルのエンコーディングを保持する必須パラメータです。 デフォルト値は utf8 です。
  3. callbackFn - このコールバック関数は、ファイルが読み取られた後に呼び出されます。 errdata の 2つのパラメーターを取ります。
callbackFn パラメータ 説明
err ファイルの読み取り中にエラーが発生した場合。
data 読み取られているファイルの内容。

ファイルに保存されている内容やデータを返すか、ファイルの読み取り中にエラーが発生します。 例でそれを理解しましょう。

コード:

const fs = require('fs');
fs.readFile('/helloworld.txt', 'utf8', (err, data) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log(data);
});

出力:

Hello DelftStack readers!

別のオプションは、同期バージョン fs.readFileSync() を使用することです。

コード:

const fs = require('fs');
try {
  const fileContent = fs.readFileSync('/helloworld.txt', 'utf8');
  console.log(fileContent);
} catch (err) {
  console.error(err);
}

出力:

Hello DelftStack readers!

fs/promises モジュールによって提供される fsPromises.readFile() メソッドを使用することもできます。

コード:

const fsPromises = require('fs/promises');

async function FileReadFn() {
  try {
    const fileContent =
        await fsPromises.readFile('/helloworld.txt', {encoding: 'utf8'});
    console.log(fileContent);
  } catch (err) {
    console.log(err);
  }
}
FileReadFn();

出力:

Hello DelftStack readers!

fs.readFile()fsPromises.readFile()fs.readFileSync() の 3つすべてが、データを返す前にファイルの内容全体をメモリに読み込みます。 これは、大きなファイルがメモリ使用量とプログラムの実行速度に大きく影響することを意味します。

ファイルの読み取りが完了するのを待つ代わりに、送信するデータの一部が準備でき次第、HTTP クライアントへのストリーミングを開始します。 ストリームには、基本的に、他のデータ処理方法を使用する場合に比べて 2つの主な利点があります。

  1. メモリ効率 - 大量のデータを処理する前にメモリにロードする必要はありません。
  2. 時間効率 - ペイロード全体が利用可能になるまで待つのではなく、すぐに処理を開始できるため、データの処理を開始するのにかかる時間が大幅に短縮されます。

ファイル ストリームでは、pipe() メソッドが呼び出され、ソースを取得して宛先に転送します。 ターゲット ストリームは、pipe() メソッドの戻り値です。これは、pipe() への複数の呼び出しをまとめてチェーンできる非常に便利なものです。

コード:

const fs = require('fs');
const http = require('http');

const nodeServer = http.createServer((req, res) => {
  const fileStream = fs.createReadStream(`${__dirname}/helloworld.txt`);
  fileStream.pipe(res);
});
nodeServer.listen(3000);

出力:

Hello DelftStack readers!
Shraddha Paghdar avatar Shraddha Paghdar avatar

Shraddha is a JavaScript nerd that utilises it for everything from experimenting to assisting individuals and businesses with day-to-day operations and business growth. She is a writer, chef, and computer programmer. As a senior MEAN/MERN stack developer and project manager with more than 4 years of experience in this sector, she now handles multiple projects. She has been producing technical writing for at least a year and a half. She enjoys coming up with fresh, innovative ideas.

LinkedIn