Node.js fs.readdir 递归目录搜索

作者:编程家 分类: 编程代码 时间:2025-10-17

使用Node.js的fs.readdir方法可以很方便地实现递归目录搜索的功能。这个方法可以读取指定目录下的所有文件和子目录,并返回一个包含它们的文件名的数组。通过递归调用这个方法,我们可以遍历整个目录树,找到我们需要的文件。

首先,我们需要引入Node.js的fs模块,这个模块提供了文件系统相关的功能。然后,我们可以使用fs.readdir方法来读取指定目录下的文件和子目录。这个方法接受两个参数,第一个参数是要读取的目录的路径,第二个参数是一个回调函数。回调函数的第一个参数是错误对象,如果读取目录出错,则会将错误对象作为第一个参数传递给回调函数。如果读取目录成功,则会将一个包含文件名的数组作为第二个参数传递给回调函数。

接下来,我们可以在回调函数中遍历文件名数组,对于每个文件名,我们可以使用fs.stat方法来判断它是一个文件还是一个目录。fs.stat方法也是fs模块提供的方法,它接受两个参数,第一个参数是要判断的路径,第二个参数是一个回调函数。回调函数的第一个参数是错误对象,如果判断路径出错,则会将错误对象作为第一个参数传递给回调函数。如果判断路径成功,则会将一个包含文件或目录的信息的对象作为第二个参数传递给回调函数。

如果判断出当前路径是一个目录,则可以递归调用fs.readdir方法,传入当前路径作为参数,实现对子目录的递归搜索。如果判断出当前路径是一个文件,则可以对文件进行相应的处理,比如打印文件名或者进行其他操作。

下面是一个具体的例子,展示了如何使用Node.js的fs.readdir方法实现递归目录搜索的功能:

javascript

const fs = require('fs');

function searchDir(dirPath) {

fs.readdir(dirPath, (err, files) => {

if (err) {

console.error(err);

return;

}

files.forEach((file) => {

const filePath = dirPath + '/' + file;

fs.stat(filePath, (err, stats) => {

if (err) {

console.error(err);

return;

}

if (stats.isDirectory()) {

// 递归搜索子目录

searchDir(filePath);

} else {

// 对文件进行处理

console.log(file);

}

});

});

});

}

// 调用搜索函数,传入要搜索的目录路径

searchDir('/path/to/directory');

案例代码:递归搜索并输出文件名

在上面的例子中,我们定义了一个名为searchDir的函数,它接受一个参数dirPath,表示要搜索的目录路径。首先,我们使用fs.readdir方法读取指定目录下的文件和子目录,并在回调函数中遍历文件名数组。对于每个文件名,我们使用fs.stat方法判断它是一个文件还是一个目录。如果是一个目录,则递归调用searchDir方法,传入该目录的路径作为参数,实现对子目录的递归搜索。如果是一个文件,则对文件进行处理,这里我们只是简单地打印文件名。

最后,我们调用searchDir函数,传入要搜索的目录路径,即可开始递归搜索并输出文件名。

这样,我们就可以使用Node.js的fs.readdir方法实现递归目录搜索的功能了。这个方法非常实用,可以帮助我们快速找到指定目录下的所有文件,并对它们进行相应的处理。无论是构建文件系统工具,还是进行文件批量处理,都可以借助这个方法来实现。