在node.js中一次读取一行文件?

我正在尝试一次读取大文件一行。 我在Quora上发现了一个关于这个问题的问题,但我错过了一些联系以使整个事情合在一起。

 var Lazy=require("lazy");
 new Lazy(process.stdin)
     .lines
     .forEach(
          function(line) { 
              console.log(line.toString()); 
          }
 );
 process.stdin.resume();

我想知道的一点是,我可能会如此示例一次从文件而不是STDIN读取一行。

我试过了:

 fs.open('./VeryBigFile.csv', 'r', '0666', Process);

 function Process(err, fd) {
    if (err) throw err;
    // DO lazy read 
 }

但它不起作用。 我知道,在一个捏,我可以退回到使用类似PHP的东西,但我想弄清楚。

我不认为其他答案会起作用,因为这个文件比我运行内存的服务器大得多。


自Node.js v0.12和Node.js v4.0.0开始,就有一个稳定的readline核心模块。 这是从文件中读取行的最简单方法,无需任何外部模块:

var lineReader = require('readline').createInterface({
  input: require('fs').createReadStream('file.in')
});

lineReader.on('line', function (line) {
  console.log('Line from file:', line);
});

最后一行被正确读取(从节点v0.12或更高版本开始),即使没有最后一个n

更新 :这个例子已经添加到Node的API官方文档中。


对于这样一个简单的操作,不应该依赖第三方模块。 放轻松。

var fs = require('fs'),
    readline = require('readline');

var rd = readline.createInterface({
    input: fs.createReadStream('/path/to/file'),
    output: process.stdout,
    console: false
});

rd.on('line', function(line) {
    console.log(line);
});

您不必open文件,但是您必须创建一个ReadStream

fs.createReadStream

然后将该流传递给Lazy

链接地址: http://www.djcxy.com/p/1507.html

上一篇: Read a file one line at a time in node.js?

下一篇: Node.js vs .Net performance