【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
【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 的内置模块 fs
和 path
。以下是一个简单的示例代码,用于递归地遍历目录及其子目录中的所有文件。
示例代码
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); // 输出文件路径
});
解释
- 导入模块:首先引入 Node.js 内置的
fs
和path
模块。 - 定义递归函数:
listFiles
函数接受一个目录路径和一个回调函数作为参数。 - 读取目录:使用
fs.readdir
方法异步读取目录内容,并设置withFileTypes: true
来获取文件类型信息。 - 遍历文件:对于每一个文件或目录,判断其是否为目录。如果是目录,则递归调用
listFiles
;如果是文件,则调用回调函数并传入文件的完整路径。 - 调用示例:最后,提供一个调用示例来展示如何使用这个函数。
这段代码能够帮助你在 Node.js 环境中实现目录的深度遍历和文件列表输出。