📜  nodejs递归读取目录 - Javascript(1)

📅  最后修改于: 2023-12-03 15:03:16.157000             🧑  作者: Mango

Node.js递归读取目录 - Javascript

在Node.js中,获取文件系统中所有文件和目录的列表是很常见的需求。使用递归函数可以轻松地处理这个任务。

实现递归函数
const fs = require('fs');
const path = require('path');

function getFiles(dir, fileList = []) {
  const files = fs.readdirSync(dir);

  files.forEach(file => {
    const filePath = path.join(dir, file);

    if (fs.statSync(filePath).isDirectory()) {
      getFiles(filePath, fileList);
    } else {
      fileList.push(filePath);
    }
  });

  return fileList;
}

该函数使用Node.js内置模块“fs”和“path”,以同步方式递归所有文件和目录。对于每个文件夹,它将递归调用自己,直到找到所有嵌套文件夹内的文件,并将结果添加到数组中。对于每个文件,它将其路径添加到文件列表中。

使用递归函数
const dir = '/path/to/directory';

const fileList = getFiles(dir);

console.log(fileList);

只需将目录路径传递给递归函数,并将返回的文件列表存储在一个变量中即可。

注意事项
  • 当目录很大时,使用递归函数可能会导致性能问题。因此,应该使用异步非阻塞代码来实现该功能。使用“fs.readdir”和“fs.stat”函数异步地获取目录和文件的信息可能更好。

  • 如果需要过滤不想要的文件类型,可以在递归函数中添加一个判断条件来实现。例如,只收集PDF文件路径:

if (file.endsWith('.pdf')) {
  fileList.push(filePath);
}
  • 递归函数可能会遇到访问权限错误。为了避免这种情况,可以使用try-catch块捕获错误或使用“fs.access”函数测试文件和目录的访问权限。
结论

使用递归函数可以轻松地获取文件系统中的所有文件和目录。此函数可帮助Node.js开发人员快速检查他们的项目中的文件结构,并根据需要对其进行操作。