如何读取NodeJS中的大文件?

时间:2017-05-31 08:12:54

标签: node.js sed

我正在尝试读取一个2000万行文件,并将行结尾从windows更正为mac。我知道它可以在sed中完成,但是sed给了我一个错误,我不知道如何修复(dos2unix:在625060行找到的二进制符号0x0008)。所以我试图在NodeJS中解决这个问题。这是我的代码:

var fs = require('fs');
var eol = require('eol');

//read file
var input = fs.readFileSync(process.argv[2], 'utf8');

//fix lines
output = eol.auto(input);
console.log("Lines Fixed! Now Writing....")

//write file
fs.writeFile(process.argv[2] + '_fixed.txt', output, function (err) {
  if (err) return console.log(err); 
});
console.log("Done!")

问题是文件太大,我得到这个错误buffer.js:513     抛出新错误('“toString()”失败');

2 个答案:

答案 0 :(得分:0)

你不应该同步这样做。 处理大数据的最佳方法是流:

let output = '';

const readStream = fs.createReadStream(filename);

readStream.on('data, function(chunk) {
  output += eol.auto(chunk.toString('utf8'));
});

readStream.on('end', function() {
  console.log('finished reading');
  // write to file here.
});

答案 1 :(得分:0)

对于读取非常大的文件,最好不要将整个文件读入内存,可以按行或按块读取文件。关于如何通过行或带有nodejs的块读取大文件,请参阅此answer herenode.js: read a text file into an array. (Each line an item in the array.)