提问者:小点点

读取txt文件时获取ERR_FS_FILE_TOO_LARGE


它可以很好地处理小文件,但对于大文件,它显示:

RangeError[ERR_FS_FILE_TOO_LARGE]:文件大小(2259809293)大于可能的缓冲区:2147483647字节

我需要打开和阅读文本文件。 我的代码是:

let text = fs.readFileSync("12.txt").toString('utf-8');;
let textByLine = text.split("\n")
let arrayForUse = textByLine.map(line => line.split(' ').filter(elementOfArray => elementOfArray !== ''));

let finalArray = []

arrayForUse.forEach(compareElement => {
  let sameItems = [];
  for(element of arrayForUse) {
    if(compareElement[0] === element[0] && compareElement[1] === element[1] && compareElement[2] !== element[2]) {
      sameItems.push(compareElement[2]);
      sameItems.push(element[2]);
    }
  }
  finalArray.push(sameItems);
})

let unique = finalArray
  .filter(element => element.length !== 0)
  .map(item => [...new Set(item)].join('='));

console.log([...new Set(unique)]);```

共1个答案

匿名用户

不能将ReadFileSync用于大文件。 它会将文件读入内存,而您的文件大于允许的最大内存缓冲区大小。

由于您只是按换行等方式将其拆分,因此您可以在文件流上使用readline模块,如这里的答案所述,或者使用line-by-lineNPM模块(可以证明,它比readline更适合于这里)。