Read last line of a large file with NodeJs
node.js
Solution
The problem with Axel's answer is he assumes the last line of a file will be empty or an EOL. This is not the case.
// 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)
});
})
}
To use:
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)
})
Problem
I'm using this example to read a large file: ``` 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 }); ``` And I want to know when `line` is the last line of file. I read the docs but can not find a solution. I already tried: ``` rl.on('line', function(line) { if (line == '' || line == require("os").EOL) console.log('eof'); }); ``` but it didnt work. Do you have any suggestions. Thanks for reading.