返回Node.js......登陆

Node.js高效按行输出文件内容

大家讲道理2016-11-10 14:14:27487
const fs = require('fs');
const EventEmitter = require('events');
const util = require('util');
const path = require('path');
 
function readFileByLine(file) {
  EventEmitter.call(this);
  file = path.normalize(file);
  this.filePath = file;
  this.lines = [];
  this.initStream();
  this.end = false;
}
 
util.inherits(readFileByLine, EventEmitter);
 
readFileByLine.prototype.initStream = function() {
  let readStream = fs.createReadStream(this.filePath, { encoding: 'utf8' });
 
  readStream.on('data', (data) => {
    this.readStream.pause();
    this.lines = this.lines.concat(data.split(/(?:\n|\r\n|\r)/g));
    this.nextLine();
  });
 
  readStream.on('end', () => {
    this.end = true;
    this.nextLine();
  });
 
  this.readStream = readStream;
};
 
readFileByLine.prototype.nextLine = function() {
  var line;
 
  if (this.end) {
    this.emit('end');
    return ;
  }
 
  if (!this.lines.length) {
    return this.readStream.resume();
  }
 
  line = this.lines.shift();
  line.length && this.emit('line', line);
 
  this.nextLine();
}

接口调用API举例

var lr = new readFileByLine('data.txt');
  lr.on('line', (line) => {
   console.log('receive line' + line);
  });
  lr.on('end', () => {
    console.log('end line reader');
  })


最新手记推荐

• 用composer安装thinkphp框架的步骤• 省市区接口说明• 用thinkphp,后台新增栏目• 管理员添加编辑删除• 管理员添加编辑删除

全部回复(0)我要回复

暂无评论~
  • 取消回复发送