2017-09-04 64 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上:/