1. ホーム
  2. javascript

[解決済み] Node.jsを使ってテキストファイルを読み込む?

2022-04-26 07:11:03

質問

ターミナルでテキストファイルを渡し、そこからデータを読み込みたいのですが、どうすればいいでしょうか?

node server.js file.txt

ターミナルからパスを渡すと、どうやってそれを相手側で読み取るのでしょうか?

どのように解決するのですか?

を使用することになります。 process.argv 配列を使ってコマンドライン引数にアクセスし、ファイル名を取得します。 ファイルシステムモジュール(fs) を使ってファイルを読み込むことができます。 例えば

// Make sure we got a filename on the command line.
if (process.argv.length < 3) {
  console.log('Usage: node ' + process.argv[1] + ' FILENAME');
  process.exit(1);
}
// Read the file and print its contents.
var fs = require('fs')
  , filename = process.argv[2];
fs.readFile(filename, 'utf8', function(err, data) {
  if (err) throw err;
  console.log('OK: ' + filename);
  console.log(data)
});

それを少し分解してみると process.argv は通常長さが2つあり、0番目の項目は"node"インタプリタで、最初の項目はnodeが現在実行しているスクリプト、それ以降はコマンドラインから渡された項目です。 argvからファイル名を取り出したら、ファイルシステムの関数を使ってファイルを読み、その内容で好きなことをすることができます。 サンプルは以下のような感じです。

$ node ./cat.js file.txt
OK: file.txt
This is file.txt!

[編集]をクリックします。 @wtfcoder が言及しているように、" を使用することです。 fs.readFile() なぜなら、コールバック関数に渡す前にファイルの全コンテンツをバッファリングしてしまうからです。 このバッファリングは多くのメモリを消費する可能性がありますが、さらに重要なのは、node.jsのコア機能の1つである非同期、イベント化されたI/Oを利用しないことです。

大きなファイル(あるいはどんなファイルでも)を処理する方法として、quot;node" は、次のように使用します。 fs.read() で、オペレーティングシステムから利用可能な各チャンクを処理します。 しかし、このようにファイルを読むと、自分自身で(おそらく)ファイルの解析/処理を漸進的に行う必要があり、ある程度のバッファリングが避けられないかもしれません。