在NodeJS中读取文件的第N行

鉴于我知道路径名和行号,因此我尝试提取文件的单行,理想情况下,我希望这样做是在 。

出于我在这里使用的目的,这是异步还是同步都没有关系。

我当前的(不良)实现如下所示:

function get_line(filename, line_no, callback) {

line_no = parseInt(line_no);

var data = fs.readFileSync(filename, 'utf8');

var lines = data.split("\n");

for (var l in lines) {

if (l == line_no - 1) {

callback(null, lines[l].trim());

return;

}

}

throw new Error('File end reached without finding line');

}

我尝试使用createReadStream进行操作,但是数据事件似乎从未触发。谁能提供直接解决此问题的方法,或者向我指出一些NodeJS文件系统交互文档,该文档比标准库API文档驱动的示例更多?

回答:

var fs = require('fs');

function get_line(filename, line_no, callback) {

var stream = fs.createReadStream(filename, {

flags: 'r',

encoding: 'utf-8',

fd: null,

mode: 0666,

bufferSize: 64 * 1024

});

var fileData = '';

stream.on('data', function(data){

fileData += data;

// The next lines should be improved

var lines = fileData.split("\n");

if(lines.length >= +line_no){

stream.destroy();

callback(null, lines[+line_no]);

}

});

stream.on('error', function(){

callback('Error', null);

});

stream.on('end', function(){

callback('File end reached without finding line', null);

});

}

get_line('./file.txt', 1, function(err, line){

console.log('The line: ' + line);

})

您应该使用slice方法而不是循环。

var fs = require('fs');

function get_line(filename, line_no, callback) {

var data = fs.readFileSync(filename, 'utf8');

var lines = data.split("\n");

if(+line_no > lines.length){

throw new Error('File end reached without finding line');

}

callback(null, lines[+line_no]);

}

get_line('./file.txt', 9, function(err, line){

console.log('The line: ' + line);

})

for(var l in lines)不是遍历数组的最有效方法,您应该这样做:

for(var i = 0, iMax = lines.length; i < iMax; i++){/* lines[i] */ }

var fs = require('fs');

function get_line(filename, line_no, callback) {

fs.readFile(filename, function (err, data) {

if (err) throw err;

// Data is a buffer that we need to convert to a string

// Improvement: loop over the buffer and stop when the line is reached

var lines = data.toString('utf-8').split("\n");

if(+line_no > lines.length){

return callback('File end reached without finding line', null);

}

callback(null, lines[+line_no]);

});

}

get_line('./file.txt', 9, function(err, line){

console.log('The line: ' + line);

})

以上是 在NodeJS中读取文件的第N行 的全部内容, 来源链接: utcz.com/qa/429969.html

回到顶部