node.js - 使用 NodeJs 读取大文件的最后一行

标签 node.js

我正在使用this example读取大文件:

var fs = require('fs');
var readline = require('readline');
var stream = require('stream');

var instream = fs.createReadStream('your/file');
var outstream = new stream;
var rl = readline.createInterface(instream, outstream);

rl.on('line', function(line) {
  // process line here
});

rl.on('close', function() {
  // do something on finish here
});

我想知道line何时是文件的最后一行。我读了docs但找不到解决办法。我已经尝试过了:

rl.on('line', function(line) {
    if (line == '' || line == require("os").EOL)
        console.log('eof');        
});

但是没有成功。
你有什么建议吗。感谢您的阅读。

最佳答案

Axel 的答案的问题是他假设文件的最后一行将为空或 EOL。事实并非如此。

// fileTools.js
const fs = require('fs');
const readline = require('readline');
const Stream = require('stream');

exports.getLastLine = (fileName, minLength) => {
    let inStream = fs.createReadStream(fileName);
    let outStream = new Stream;
    return new Promise((resolve, reject)=> {
        let rl = readline.createInterface(inStream, outStream);

        let lastLine = '';
        rl.on('line', function (line) {
            if (line.length >= minLength) {
                lastLine = line;
            }
        });

        rl.on('error', reject)

        rl.on('close', function () {
            resolve(lastLine)
        });
    })
}

使用:

const getLastLine = require('./fileTools.js').getLastLine
const fileName = 'C:\\someWinDir\\somelog.log'
const minLineLength = 1
getLastLine(fileName, 1)
    .then((lastLine)=> {
        console.log(lastLine)
    })
    .catch((err)=> {
        console.error(err)
    })

关于node.js - 使用 NodeJs 读取大文件的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40107433/

相关文章:

javascript - CSRF 禁止在我的注册表上显示,不知道为什么

node.js - 在模型中创建模型

sql - 与以下 sql 查询相关的 sequelize 查询是什么?

javascript - 使用某些设置启动nodejs应用程序?

javascript - 在node.js中使用forEach引用JSON对象

node.js - 您如何播种 mongodb 数据库,以便 Keystone 5 CMS 识别多对多关系?

Node.js 和 passport-facebook 回调永远不会结束

node.js - 解析器中的 Angular HttpClient 问题

node.js - 颜色.js : Proper syntax for adding a color to a variable (string)?

javascript - 如何通过 MongoDB 驱动程序 (node.js) 向对象添加属性(属性名称是可变的)