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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:01:20