什么是最有效的方法来读取节点JS中的文件的第一行?

假设你有很多长文本文件,你只需要从每个文件的第一行提取数据(不需要读取更多的内容)。 什么是节点JS的最好的方法来做到这一点?

谢谢!

我最终采用了这个解决scheme,这看起来是迄今为止我见过的最高性能的解决scheme:

 var fs = require('fs'); var Q = require('q'); function readFirstLine (path) { return Q.promise(function (resolve, reject) { var rs = fs.createReadStream(path, {encoding: 'utf8'}); var acc = ''; var pos = 0; var index; rs .on('data', function (chunk) { index = chunk.indexOf('\n'); acc += chunk; index !== -1 ? rs.close() : pos += chunk.length; }) .on('close', function () { resolve(acc.slice(0, pos + index)); }) .on('error', function (err) { reject(err); }) }); } 

为了方便,我创build了一个名为“ firstline ”的npm模块。

感谢@dandavis的build议使用String.prototype.slice()

//干得好;

 var lineReader = require('line-reader'); var async = require('async'); exports.readManyFiles = function(files) { async.map(files, function(file, callback)) lineReader.open(file, function(reader) { if (reader.hasNextLine()) { reader.nextLine(function(line) { callback(null,line); }); } }); }, function(err, allLines) { //do whatever you want to with the lines }) } 

请试试这个:

https://github.com/yinrong/node-line-stream-util#get-head-lines

一旦得到了头条,就可以切断上游。