使用一個小型的Java工具來獲取一組基於一組文件擴展名的文件,我在討論使用listFiles()和使用continue;
當我遇到一個壞文件時,與使用自定義FileFilter或FilenameFilter對我執行相同的操作。FileFilter/FilenameFilter的好處
在我看來,這些方法是集成工具(如Swing文件瀏覽)的便捷方法,並且如果我們不掛鉤任何這些工具,則不會比手動方法更有效。那是對的嗎?這些過濾工具是否還有其他好處?
使用一個小型的Java工具來獲取一組基於一組文件擴展名的文件,我在討論使用listFiles()和使用continue;
當我遇到一個壞文件時,與使用自定義FileFilter或FilenameFilter對我執行相同的操作。FileFilter/FilenameFilter的好處
在我看來,這些方法是集成工具(如Swing文件瀏覽)的便捷方法,並且如果我們不掛鉤任何這些工具,則不會比手動方法更有效。那是對的嗎?這些過濾工具是否還有其他好處?
從JDK 1.6源:
public String[] list(FilenameFilter filter) {
String names[] = list();
if ((names == null) || (filter == null)) {
return names;
}
ArrayList v = new ArrayList();
for (int i = 0 ; i < names.length ; i++) {
if (filter.accept(this, names[i])) {
v.add(names[i]);
}
}
return (String[])(v.toArray(new String[v.size()]));
}
所以,你可以看到,基本上,同樣的事情在這裏,你會用手工測試做完成。它帶給你的唯一的東西就是不必重新發明輪子,如果他們突然發現了更快的方式來做到這一點,你將不必更改代碼:)
不,你認爲你在那裏的錢是正確的。他們是便利的方法。他們只是取一個名字,(並且知道你最初設置的擴展名),並且檢查它是否應該包含在非列表中。無論如何你都在做什麼。
從Java文檔:
public boolean accept(File dir, String name)
測試指定的文件應該包含在文件列表中。
這正是你在做什麼。
像任何其他基於接口的API一樣,這允許邏輯的重用。你可以有java.io. * API找到任何類型爲你的文件,特別是如果你使用庫,比如Apache下議院IO:
http://commons.apache.org/io/api-1.4/org/apache/commons/io/filefilter/package-summary.html
它帶給你的主要功能是能夠參數化列出具有不同過濾條件(在所述代碼之外定義的)的文件的代碼。 – Thilo 2010-12-15 11:37:22
謝謝,你說得對。起初,我認爲自己做起來會更簡單,但我很快意識到實現FilenameFilter更有效(代碼)並且更加簡潔,甚至實際上讓我的代碼更加健壯。 – dimo414 2010-12-15 12:58:28