大佬教程收集整理的这篇文章主要介绍了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,请注明来意。