能否通过Glob模式过滤目录?仅修改Glob筛选器获取目录流
问题
我有如下示例代码:
String myGlobFilter = /*whatever*/; DirectoryStream<Path> stream = Files.newDirectoryStream(myPathToLookIn, myGlobFilter);
请问是否仅通过修改myGlobFilter,就能让返回的DirectoryStream<Path>仅包含目录?正确的myGlobFilter写法是什么?我尝试过*/,但仍会包含文件。
回答
不行,仅靠修改Glob过滤器无法实现只筛选目录。
Glob规则仅能对路径字符串做匹配,无法区分文件系统对象的实际类型(文件/目录)。你尝试的*/之所以还会包含文件,是因为该规则只是匹配名称以/结尾的路径字符串,但实际文件系统中,文件的路径并不会带有结尾的/——本质上Glob只做字符串层面的匹配,不会校验对象的实际类型。
要仅获取目录,推荐两种可行方式:
- 方式一:使用
Files.newDirectoryStream的重载方法,传入DirectoryStream.Filter来判断对象类型:
DirectoryStream<Path> stream = Files.newDirectoryStream(myPathToLookIn, path -> Files.isDirectory(path));
- 方式二:遍历原始的
DirectoryStream,手动过滤出目录:
try (DirectoryStream<Path> stream = Files.newDirectoryStream(myPathToLookIn)) { for (Path entry : stream) { if (Files.isDirectory(entry)) { // 处理目标目录 } } }
内容的提问来源于stack exchange,提问作者MoxxiManagarm
相关产品推荐
相关产品推荐

