使用Node.js读取文本文件?

我需要在terminal传递一个文本文件,然后从它读取数据,我该怎么做?

node server.js file.txt 

我如何从terminal通过,如何从另一端读取?

您将需要使用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) }); 

为了减less这个问题, process.argv通常有两个长度,第零个项目是“节点”解释器,第一个项目是当前正在运行的脚本,之后的项目在命令行中传递。 一旦你从argv中拉出了一个文件名,那么你可以使用文件系统函数来读取文件,并用它的内容做任何你想做的事情。 示例用法如下所示:

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

[编辑]正如@wtfcoder提到的,使用“ fs.readFile() ”方法可能不是最好的主意,因为它将缓冲文件的全部内容,然后将其传递给callback函数。 这种缓冲可能会使用大量的内存,但更重要的是,它并没有利用node.js的一个核心特性 – asynchronous,偶数I / O。

处理大文件(或任何文件,真的)的“节点”方法是使用fs.read()并处理每个可用的块,因为它可从操作系统获得。 但是,阅读这个文件需要你做自己的(可能)增量parsing/处理文件,并且一些缓冲可能是不可避免的。

恕我直言, fs.readFile()应该避免,因为它加载内存中的所有文件,它不会调用callback,直到所有文件已被读取。

读取文本文件最简单的方法是逐行阅读。 我推荐一个BufferedReader :

 new BufferedReader ("file", { encoding: "utf8" }) .on ("error", function (error){ console.log ("error: " + error); }) .on ("line", function (line){ console.log ("line: " + line); }) .on ("end", function (){ console.log ("EOF"); }) .read (); 

对于像.properties或json文件这样复杂的数据结构,您需要使用parsing器(在内部它也应该使用缓冲读取器)。

您可以使用readstream和pipe逐行读取文件,而无需将所有文件一次读入内存。

 var fs = require('fs'), es = require('event-stream'), os = require('os'); var s = fs.createReadStream(path) .pipe(es.split()) .pipe(es.mapSync(function(line) { //pause the readstream s.pause(); console.log("line:", line); s.resume(); }) .on('error', function(err) { console.log('Error:', err); }) .on('end', function() { console.log('Finish reading.'); }) ); 

我发布了一个完整的例子,我终于工作了。 在这里,我正在从一个脚本rooms/rooms.js的文件rooms/rooms.txt读取rooms/rooms.js

 var fs = require('fs'); var path = require('path'); var readStream = fs.createReadStream(path.join(__dirname, '../rooms') + '/rooms.txt', 'utf8'); let data = '' readStream.on('data', function(chunk) { data += chunk; }).on('end', function() { console.log(data); });