2011-08-26 223 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