Javascript 如何读取文件夹节点js advanced中的文件?

Javascript 如何读取文件夹节点js advanced中的文件?,javascript,node.js,Javascript,Node.js,我将使用这个脚本,我得到一些错误 因为我会读到一千万行,然后发现他 对于某些函数,我无法解决这个问题,但我认为,如果有人解决了这个问题,而不是将所有内容添加到区域中,我们将解决这个bug 谢谢你的帮助 const fs = require('fs'); //joining path of directory const directoryPath = path.join(__dirname, 'Documents'); //passsing directoryPath and callback

我将使用这个脚本,我得到一些错误 因为我会读到一千万行,然后发现他 对于某些函数,我无法解决这个问题,但我认为,如果有人解决了这个问题,而不是将所有内容添加到区域中,我们将解决这个bug 谢谢你的帮助

const fs = require('fs');
//joining path of directory 
const directoryPath = path.join(__dirname, 'Documents');
//passsing directoryPath and callback function
fs.readdir(directoryPath, function (err, files) {
   //handling error
   if (err) {
       return console.log('Unable to scan directory: ' + err);
   } 
   //listing all files using forEach
   files.forEach(function (file) {
       // Do whatever you want to do with the file
       console.log(file); 
   });
});


error :-
<--- Last few GCs --->

[1564:00000280010DEA30]    80020 ms: Mark-sweep 2055.1 (2057.5) -> 2055.1 (2058.8) MB, 2339.5 / 0.0 ms  (average mu = 0.159, current mu = 0.093) allocation failure scavenge might not succeed
[1564:00000280010DEA30]    82029 ms: Mark-sweep 2056.4 (2058.8) -> 2056.4 (2060.3) MB, 1874.6 / 0.0 ms  (average mu = 0.118, current mu = 0.067) allocation failure scavenge might not succeed


<--- JS stacktrace --->

==== JS stack trace =========================================
const fs=require('fs');
//目录的连接路径
const directoryPath=path.join(uu dirname,'Documents');
//传递directoryPath和回调函数
fs.readdir(directoryPath,函数(err,文件){
//处理错误
如果(错误){
返回console.log('无法扫描目录:'+err);
} 
//使用forEach列出所有文件
forEach(函数(文件){
//你想对这个文件做什么就做什么
console.log(文件);
});
});
错误:-
[1564:00000 280010DEA30]80020毫秒:标记扫描2055.1(2057.5)->2055.1(2058.8)MB,2339.5/0.0毫秒(平均mu=0.159,当前mu=0.093)分配失败清除可能无法成功
[1564:00000280010DEA30]82029毫秒:标记扫描2056.4(2058.8)->2056.4(2060.3)MB,1874.6/0.0毫秒(平均mu=0.118,当前mu=0.067)分配失败清除可能无法成功
==JS堆栈跟踪=========================================

从节点开始
=v12.12.0
,不会将所有条目加载到内存中:

const fs = require('fs');

async function processDir(path) {
  const dir = await fs.promises.opendir(path);
  for await (const entry of dir) {
    console.log(entry.name); // process the directory entry here
  }
}

processDir('./path-to-dir').catch(console.error);

编辑: 由于文件本身很大,您还需要异步处理这些文件,而不是立即将其内容加载到内存中。有很多方法可以做到这一点,所以这个问题解决了同样的问题:

例如,您可以这样做(仍然需要错误处理,但应该给您一个开始):


看起来您的目录要么有大量的文件,要么只有少量非常巨大的文件,在这两种情况下,在整个过程中,大量数据都存储在内存中。试着分批处理,比如一次20个文件或其他。如果我尝试10个文件或100k行,如果文件大不起作用,我会这样做,但不会处理我在同一代码中使用的相同错误nath_var=fs.readFileSync(
${dir.path}/${entry.name}
,'utf-8')。替换(/\r/g',)。拆分('\n')。过滤器(布尔);它的最新版本?看起来文件本身非常大->已经有问题了,所以要解决这个问题:看看这个例子
const fs = require('fs');
const path = require('path');
const LineByLineReader = require('line-by-line');

async function processDir(pathToDir) {
    const dir = await fs.promises.opendir(pathToDir);
    const processFilePromises = [];
    for await (const entry of dir) {
        processFilePromises.push(processFile(path.resolve(pathToDir, entry.name)));
    }
    return Promise.all(processFilePromises);
}

async function processFile(file) {
    return new Promise(resolve => {
        const lr = new LineByLineReader(file);
        lr.on('line', (line) => {
           // process the line here
        });

        lr.on('end', () => {
            resolve();
        });
    })
}

processDir('./path-to-your-dir').catch(console.error);