如何在Node.js中读取仅包含foo子文件夹的目录?
如何筛选包含指定子文件夹的目录并读取其内容?
场景说明
你的目录结构如下:
main |__main_A/foo |__main_B/a |__main_C/b |__main_D/foo |__main_E/foo |__main_F/c
需要从main目录下筛选出包含foo子文件夹的子目录,最终读取这些foo文件夹内的所有文件。
解决方案代码
结合fs/promises和path模块可以实现需求,修改后的代码如下:
const fsPromise = require('fs/promises'); const path = require('path'); async function readFooFolder() { try { const pathProd = 'C:\\main'; // 读取主目录下的所有子项,同时获取文件类型信息 const items = await fsPromise.readdir(pathProd, { withFileTypes: true }); // 筛选出主目录下的子目录 const subDirs = items.filter(item => item.isDirectory()).map(item => item.name); // 遍历每个子目录,检查并读取foo文件夹内容 for (const subDir of subDirs) { const fooPath = path.join(pathProd, subDir, 'foo'); try { // 验证foo目录是否存在且可访问 await fsPromise.access(fooPath, fsPromise.constants.F_OK); // 读取foo目录下的所有文件 const fooFiles = await fsPromise.readdir(fooPath); console.log(`目录 ${subDir} 下的foo文件夹内容:`, fooFiles); } catch (err) { // foo不存在或无权限访问时,直接跳过该目录 continue; } } } catch (err) { console.error('读取主目录失败:', err); } } // 执行函数 readFooFolder();
代码说明
- 用
readdir的withFileTypes: true选项直接获取子项类型,避免额外调用stat判断是否为目录,提升执行效率。 - 通过
path.join拼接路径,避免手动拼接导致的跨平台路径格式问题。 - 用
fsPromise.access快速验证foo目录的存在性,若不存在则直接跳过对应子目录;也可改用fsPromise.stat并判断stat.isDirectory(),确保目标是文件夹而非同名文件。 - 单个
foo目录的读取操作单独做错误捕获,避免某一个目录的异常中断整个遍历流程。
可选优化
如果需要递归读取foo文件夹下的所有嵌套文件(包括子目录里的文件),可以给readdir添加recursive: true参数:
const fooFiles = await fsPromise.readdir(fooPath, { recursive: true });
内容的提问来源于stack exchange,提问作者JBC
相关产品推荐
相关产品推荐

