2017-09-04 78 views
1

所以我只想列出在指定目录中的目录。我尝试了FileFilter和FilenameFilter。两者都不适合我,因为它们还包含文件。但不知何故,其他人对此没有任何问题。Java FileFilter仅列出目录

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"); 
    } 
}); 

任何提示吗?

+1

您可以发布[ MCVE] – 2017-09-04 18:06:01

回答

1

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

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

你也可以尝试从here的例子吗?

1

isDirectory()文档:

如要求区分该文件不是目录,或者在同一时间都需要在同一文件的多个属性的情况下,I/O异常,那么可以使用Files.readAttributes方法。

您可以试试readAttributes方法吗?也许你会得到一些IO异常来澄清问题。

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上:/