在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