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

Groovy中如何通过非递归方式获取指定文件夹的直接子目录列表?

获取指定文件夹的直接子目录(非递归方案)

需要获取指定文件夹下的直接子目录(不包含嵌套子目录),示例目录结构:

A/B/C
A/D/E
A/F
A/regular-file.txt

当目标文件夹为A时,期望输出:[B, D, F]。以下是几种优雅的非递归实现方案:

Python 实现

使用os.scandir(Python 3.5+)是高效且简洁的方案,它返回的DirEntry对象可直接判断是否为目录,无需额外拼接路径:

import os

target_dir = "A"
direct_subdirs = [entry.name for entry in os.scandir(target_dir) if entry.is_dir()]
print(direct_subdirs)  # 输出: ['B', 'D', 'F']

如果用旧版本Python,也可以用os.listdir结合os.path.isdir:

import os

target_dir = "A"
direct_subdirs = [
    name for name in os.listdir(target_dir)
    if os.path.isdir(os.path.join(target_dir, name))
]
print(direct_subdirs)

Bash 实现

用find命令限制深度为1,仅查找当前目录下的子目录:

# 直接输出子目录名称
find A -maxdepth 1 -type d ! -name A

# 存入数组使用
direct_subdirs=($(find A -maxdepth 1 -type d ! -name A))
echo "${direct_subdirs[@]}"  # 输出: B D F

Java 实现

使用Files.newDirectoryStream筛选目录类型的条目:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class DirectSubdirs {
    public static void main(String[] args) throws IOException {
        Path targetDir = Paths.get("A");
        List<String> directSubdirs = new ArrayList<>();
        
        try (var stream = Files.newDirectoryStream(targetDir)) {
            for (Path entry : stream) {
                if (Files.isDirectory(entry)) {
                    directSubdirs.add(entry.getFileName().toString());
                }
            }
        }
        
        System.out.println(directSubdirs);  // 输出: [B, D, F]
    }
}

内容的提问来源于stack exchange,提问作者Volodya Lombrozo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:22:17