使用FilenameFilter接口筛选Books目录下j开头子目录无输出问题排查
代码错误分析与修正
你的代码核心错误在于对FilenameFilter接口的accept方法参数理解偏差:
- 方法中的
dir参数是你指定的父目录(即C:/users/Dell/Desktop/Books),而非当前遍历的子项。你当前的判断条件dir.isDirectory() && dir.getName().startsWith("j"),实际是在检查父目录是否为目录且父目录名以"j"开头——但父目录名是"Books",完全不满足以"j"开头的条件,所以筛选结果为空,自然没有输出。 - 同时你未判断遍历到的子项(即
name对应的条目)是否为目录,不符合你“仅筛选目录、排除文件”的需求。
修正后的代码如下:
package dirspkg; import java.io.File; import java.util.Arrays; import java.util.Objects; import java.io.FilenameFilter; public class DirectoryDemo { public static void main(String... args) { File directory = new File("C:/users/Dell/Desktop/Books"); Arrays.stream(Objects.requireNonNull(directory.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { // 根据父目录和子项名称创建File对象,判断是否为目录且名称以"j"开头 File childItem = new File(dir, name); return childItem.isDirectory() && name.startsWith("j"); } }))).forEach(System.out::println); } }
内容的提问来源于stack exchange,提问作者DammyD
相关产品推荐
相关产品推荐

