Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – 在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,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,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,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,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',linE){
  console.log('The line: ' + linE);
})

大佬总结

以上是大佬教程为你收集整理的node.js – 在NodeJS中读取第N行文件全部内容,希望文章能够帮你解决node.js – 在NodeJS中读取第N行文件所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。