Java FileFilter仅列出目录

时间:2017-09-04 18:00:09

标签: java

所以我想只列出指定目录中的目录。我尝试了FileFilter和FilenameFilter。两者都不适合我,因为它们也包括文件。但不知何故,其他人也不会有这个问题。

java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

的FileFilter:

private static File maps_dir_src = new File("./maps/");
private static File[] maps_arr_src = maps_dir_src.listFiles(new FileFilter() {

    @Override
    public boolean accept(File file) {
        return file.isDirectory() && !file.getName().toLowerCase().equals("lobby");
    }
});

的FilenameFilter:

private static File maps_dir_src = new File("./maps/");
private static File[] maps_arr_src = maps_dir_src.listFiles(new FilenameFilter() {

    @Override
    public boolean accept(File file, String name) {
        return file.isDirectory() && !name.toLowerCase().equals("lobby");
    }
});

任何提示?

3 个答案:

答案 0 :(得分:1)

您的FileFilter代码看起来有效;对于FilenameFilter,你需要这个:

return new File(file, name).isDirectory();

您还可以尝试here中的示例吗?

答案 1 :(得分:1)

来自isDirectory()文档:

  

如果需要区分I / O异常与文件不是目录的情况,或者同时需要同一文件的多个属性的情况,则可以使用Files.readAttributes方法。

你能试试readAttributes方法吗?也许你会得到一些IO例外,这将澄清问题。

答案 2 :(得分:1)

感谢您的回答@everybody

不知何故,当我创建MCVE时,它起作用了。但原始代码仍然需要修复。经过一段时间尝试不同的方式,我找到了一种有效的方法。 (不知道为什么它会像那样工作,之前没有工作过。)

private static File maps_dir_src = new File("./maps/");
private static File[] maps_arr_src = maps_dir_src.listFiles(new FileFilter() {

    @Override
    public boolean accept(File file) {
        return file.isDirectory() && !file.getName().equalsIgnoreCase("lobby");
    }
});

编辑:不知何故,此修复仅适用于MacOS,但不适用于Windows:/