在JavaScript中,尤其是在Node.js环境下,你可以使用fs
模块来循环遍历文件夹下的所有文件。以下是一个使用递归函数来遍历文件夹及其子文件夹中的所有文件的示例代码:
const fs = require('fs');
const path = require('path');
function traverseDirectory(dir, callback) {
fs.readdirSync(dir).forEach(file => {
const fullPath = path.join(dir, file);
if (fs.statSync(fullPath).isDirectory()) {
// 如果是文件夹,则递归遍历
traverseDirectory(fullPath, callback);
} else {
// 如果是文件,则执行回调函数
callback(fullPath);
}
});
}
// 使用示例
traverseDirectory('./your-directory-path', filePath => {
console.log(filePath); // 打印出文件的完整路径
});
在这个示例中,traverseDirectory
函数接受两个参数:要遍历的目录路径和一个回调函数。对于目录中的每个文件或子目录,它会检查是否是文件系统中的目录。如果是目录,它会递归调用自身;如果是文件,它会调用回调函数,并将文件的完整路径作为参数传递。
请注意,这个示例使用了同步版本的fs
模块方法(例如readdirSync
和statSync
),这意味着它会阻塞事件循环直到操作完成。在处理大量文件或在性能敏感的应用程序中,这可能不是最佳选择。在这种情况下,你可以使用异步版本的fs
模块方法来避免阻塞事件循环。
异步版本的示例代码如下:
const fs = require('fs');
const path = require('path');
function traverseDirectoryAsync(dir, callback) {
fs.readdir(dir, (err, files) => {
if (err) throw err;
files.forEach(file => {
const fullPath = path.join(dir, file);
fs.stat(fullPath, (err, stats) => {
if (err) throw err;
if (stats.isDirectory()) {
traverseDirectoryAsync(fullPath, callback);
} else {
callback(fullPath);
}
});
});
});
}
// 使用示例
traverseDirectoryAsync('./your-directory-path', filePath => {
console.log(filePath); // 打印出文件的完整路径
});
在这个异步版本中,我们使用了回调函数来处理每个文件和目录,这样就不会阻塞事件循环,可以更好地处理大量文件或在高并发环境下工作。
请将./your-directory-path
替换为你想要遍历的目录路径。
领取专属 10元无门槛券
手把手带您无忧上云