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
相关产品推荐
相关产品推荐

