在JavaScript中,遍历文件夹通常是在Node.js环境下进行的,因为浏览器端的JavaScript由于安全限制无法直接访问文件系统。在Node.js中,可以使用fs
模块来遍历文件夹。
以下是一个使用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.lstatSync(fullPath).isDirectory()) {
// 如果是文件夹,则递归遍历
traverseDirectory(fullPath, callback);
} else {
// 如果是文件,则执行回调函数
callback(fullPath);
}
});
}
// 使用示例
traverseDirectory('./your-directory-path', filePath => {
console.log(filePath); // 打印文件路径
});
在这个示例中,traverseDirectory
函数接受两个参数:要遍历的文件夹路径和一个回调函数。对于文件夹中的每个文件或子文件夹,它会检查是否是文件夹,如果是,则递归调用自身;如果不是,则执行回调函数。
fs
模块提供了同步和异步两种方法,可以根据需要选择。try...catch
捕获异常并处理。为了避免阻塞主线程,可以使用异步方法来实现遍历:
const fs = require('fs').promises;
const path = require('path');
async function traverseDirectoryAsync(dir, callback) {
try {
const files = await fs.readdir(dir);
for (const file of files) {
const fullPath = path.join(dir, file);
const stat = await fs.lstat(fullPath);
if (stat.isDirectory()) {
await traverseDirectoryAsync(fullPath, callback);
} else {
callback(fullPath);
}
}
} catch (err) {
console.error(`Error accessing ${dir}: ${err}`);
}
}
// 使用示例
traverseDirectoryAsync('./your-directory-path', filePath => {
console.log(filePath); // 打印文件路径
});
这个异步版本使用fs.promises
提供的异步方法,可以更好地处理大量文件和文件夹,避免阻塞事件循环。
领取专属 10元无门槛券
手把手带您无忧上云