2011-08-26 224 views
71

我有代碼如下:如何按字母順序排列File.listFiles?

class ListPageXMLFiles implements FileFilter { 

     @Override 
     public boolean accept(File pathname) { 
       DebugLog.i("ListPageXMLFiles", "pathname is " + pathname); 

       String regex = ".*page_\\d{2}\\.xml"; 
       if(pathname.getAbsolutePath().matches(regex)) { 
         return true; 
       } 
       return false; 
     } 
} 

public void loadPageTrees(String xml_dir_path) { 
     ListPageXMLFiles filter_xml_files = new ListPageXMLFiles(); 
     File XMLDirectory = new File(xml_dir_path); 
     for(File _xml_file : XMLDirectory.listFiles(filter_xml_files)) { 
       loadPageTree(_xml_file); 
     } 
} 

FileFilter工作很好,但listFiles()似乎在上市相反的字母順序的文件。有沒有一些快速告訴listFile()按字母順序列出文件?

+0

剛編輯我的答案。現在應該適合你的需求。 –

+0

感謝您的編輯,康斯坦丁。我最近剛剛在Android上工作,並且那個細節下滑了我的想法。 ;-) –

+0

而不是使用正則表達式,而是使用'.endsWith(「。xml」)'。 – Fred

回答

176

listFiles方法,帶有或不帶有過濾器並不能保證任何順序。

它,然而,返回一個數組,你可以用Arrays.sort()排序。

File[] files = XMLDirectory.listFiles(filter_xml_files); 
Arrays.sort(files); 
for(File _xml_file : files) { 
    ... 
} 

這是可行的,因爲File是一個可比較的類,它默認按照字典順序排列路徑名。如果你想對它們進行不同的排序,你可以定義你自己的比較器。

+0

這是一個代碼優美的線條,但Arrays.sort()似乎不是一個可迭代返回void。我會捅一下。 –

+3

@雷霆兔,我的歉意!很抱歉,你是對的。我應該測試它。我編輯了我的答案。 –

+0

謝謝!它適用於我,它(仍然)非常簡單! –

0

我覺得以前的答案是在這裏做它最好的辦法是另一種簡單的方法。只是爲了打印排序的結果。

String path="/tmp"; 
String[] dirListing = null; 
File dir = new File(path); 
dirListing = dir.list(); 
Arrays.sort(dirListing); 
System.out.println(Arrays.deepToString(dirListing)); 
+1

我已更新此請重新考慮。在此先感謝 –

+0

,請您提供意見,爲什麼你認爲這不是一個正確的答案。所以,我可以相應地修改它。 –

+1

-1我真的不理解文件數組轉換爲字符串數組,然後排序,而不是僅僅對文件進行排序數組作爲公認的答案確實的優勢。 – zelanix