【Nodejs模块】深度遍历目录/列出目录下所有文件

【Nodejs模块】深度遍历目录/列出目录下所有文件

使用方法:

var rd = require('rd');

// 异步列出目录下的所有文件
rd.read('/tmp', function (err, files) {
  if (err) throw err;
  // files是一个数组,里面是目录/tmp目录下的所有文件(包括子目录)
});

// 同步列出目录下的所有文件
var files = rd.readSync('/tmp');

// 异步遍历目录下的所有文件
rd.each('/tmp', function (f, s, next) {
  // 每找到一个文件都会调用一次此函数
  // 参数s是通过 fs.stat() 获取到的文件属性值
  console.log('file: %s', f);
  // 必须调用next()才能继续
  next();
}, function (err) {
  if (err) throw err;
  // 完成
});

// 同步遍历目录下的所有文件
rd.eachSync('/tmp', function (f, s) {
  // 每找到一个文件都会调用一次此函数
  // 参数s是通过 fs.stat() 获取到的文件属性值
  console.log('file: %s', f);
});

安装: $ npm install rd

源码: https://github.com/leizongmin/node-rd


14 回复

【Node.js 模块】深度遍历目录/列出目录下所有文件

在 Node.js 中,深度遍历目录并列出其中的所有文件是一项常见的任务。我们可以使用 node-rd 这个库来实现这一功能。该库提供了异步和同步两种方式来读取和遍历目录。

使用方法:

首先需要安装 node-rd 库:

npm install rd

接下来,我们可以通过以下几种方式来遍历和读取目录中的文件:

异步列出目录下的所有文件
var rd = require('rd');

// 异步列出目录下的所有文件
rd.read('/tmp', function (err, files) {
  if (err) throw err;
  // files 是一个数组,包含目录 /tmp 下的所有文件(包括子目录)
  console.log(files);
});
同步列出目录下的所有文件
var rd = require('rd');

// 同步列出目录下的所有文件
var files = rd.readSync('/tmp');
console.log(files);
异步遍历目录下的所有文件
var rd = require('rd');

// 异步遍历目录下的所有文件
rd.each('/tmp', function (f, s, next) {
  // 每找到一个文件都会调用一次此函数
  // 参数 s 是通过 fs.stat() 获取到的文件属性值
  console.log('file: %s', f);
  // 必须调用 next() 才能继续
  next();
}, function (err) {
  if (err) throw err;
  // 完成
  console.log('遍历完成');
});
同步遍历目录下的所有文件
var rd = require('rd');

// 同步遍历目录下的所有文件
rd.eachSync('/tmp', function (f, s) {
  // 每找到一个文件都会调用一次此函数
  // 参数 s 是通过 fs.stat() 获取到的文件属性值
  console.log('file: %s', f);
});

安装

$ npm install rd

源码

你可以查看 node-rd 的源码以了解其实现细节:

通过这些方法,你可以在 Node.js 中轻松地遍历和列出目录下的所有文件。希望这些示例代码对你有所帮助!


给个建议,nodejs下面直接throw err不是好方法,还是通过回调解决吧

不会意思,没看仔细,这个是使用方法不是lib

老雷速度很快,lincell已经用了这个.

为了给你的lincell用而专门写的

老雷辛苦啦,关注了这个项目,以后有机会用上方便找到啊

https://github.com/thlorenz/readdirp 这个也是, 不过看起来很复杂的样子

还是我这个够简洁,功能还强大

你的rrestjs那个自动路由模块,好像不能载入子目录的文件吧?用了这个模块就很方便实现了

亲 你的lincell会让浏览器卡死@@ 。。。不知道怎么回事

不如exec(‘ll -R’)来得快

我好像写过一个类似的iwalk,还能防止open file too many问题。

这个模块也不会出现 open file too many 的,有限制并发数量

要实现深度遍历目录并列出目录下所有文件的功能,可以使用 Node.js 的内置模块 fspath。以下是一个简单的示例代码,用于递归地遍历目录及其子目录中的所有文件。

示例代码

const fs = require('fs');
const path = require('path');

function listFiles(dirPath, callback) {
  fs.readdir(dirPath, { withFileTypes: true }, (err, files) => {
    if (err) return callback(err);

    files.forEach(file => {
      const fullPath = path.join(dirPath, file.name);

      if (file.isDirectory()) {
        // 如果是目录,则递归处理
        listFiles(fullPath, callback);
      } else {
        // 如果是文件,则调用回调函数
        callback(null, fullPath);
      }
    });
  });
}

// 使用示例
listFiles('/tmp', (err, filePath) => {
  if (err) throw err;
  console.log(filePath); // 输出文件路径
});

解释

  1. 导入模块:首先引入 Node.js 内置的 fspath 模块。
  2. 定义递归函数listFiles 函数接受一个目录路径和一个回调函数作为参数。
  3. 读取目录:使用 fs.readdir 方法异步读取目录内容,并设置 withFileTypes: true 来获取文件类型信息。
  4. 遍历文件:对于每一个文件或目录,判断其是否为目录。如果是目录,则递归调用 listFiles;如果是文件,则调用回调函数并传入文件的完整路径。
  5. 调用示例:最后,提供一个调用示例来展示如何使用这个函数。

这段代码能够帮助你在 Node.js 环境中实现目录的深度遍历和文件列表输出。

回到顶部