You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:25:26