逐行读取文件的解决方案的后续操作,如下所述:https : //stackoverflow.com/a/16013228/570796
var fs = require('fs'),
readline = require('readline'),
instream = fs.createReadStream('/path/to/file');
var rl = readline.createInterface(
{
input: instream,
terminal: false
});
rl.on('line', function(line)
{
console.log(line);
// if(instream.isEnd()) ...
});
Run Code Online (Sandbox Code Playgroud)
如何检测我是否到达文件末尾?
我知道有一个事件,ReadStream on('end', () => {/*...*/})但我需要一个解决方案,我可以通过 if 语句检查它。
这是一个解决方案:
let ended = false;
instream.on('end', () => { ended = true });
rl.on('line', function(line) {
if (ended) {
//...
Run Code Online (Sandbox Code Playgroud)
但是,您很有可能实际上并不需要它,并且您的应用程序的结构可能有所不同。
我不确定line事件是否会在事件发生后end发生。
事实证明我的怀疑是真的,所以你需要这样做。
let lastLine;
rl.on('line', line => { lastLine = line })
instream.on('end', () => {
assert.notStrictEqual(lastLine, undefined, 'There were no lines!');
// ...
});
Run Code Online (Sandbox Code Playgroud)
小智 5
您还可以使用该close事件。
const fs = require("fs");
const readline = require('readline');
const readInterface = readline.createInterface({
input: fs.createReadStream("path/to/file.txt"),
output: process.stdout,
terminal: false,
})
rl.on("line", function(line){
console.log(line);
}).on("close", function() {
console.log("EOF");
})
Run Code Online (Sandbox Code Playgroud)
close当文件没有更多数据可供读取时,该事件将运行。