2011-08-26 17 views
71

Ben aşağıda bir kod var:Nasıl File.listFiles alfabetik sıraya göre?

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 güzel çalışıyor

ancak listFiles() ters alfabetik sırada dosyaları listeleme gibi görünüyor. Dosyaları alfabetik sırayla listelemek için listFile()'a hızlı bir şekilde söylemenin bir yolu var mı?

+0

Sadece cevabımı düzenledim. Şimdi ihtiyaçlarınızı karşılamalıdır. –

+0

Düzenleme için teşekkürler Konstantin. Son zamanlarda sadece Android'de çalışıyorum ve bu detay aklımı kaçırdı. ;-) –

+0

Regex kullanmak yerine, '.endsWith (". Xml ")' işlevini kullanın. – Fred

cevap

176

listFiles yöntemi, filtreli veya filtresiz herhangi bir sipariş garantisi vermez.

Ancak, Arrays.sort() ile sıralayabileceğiniz bir dizi döndürür.

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

File varsayılan türlü ile sözlük sırasında pathnames karşılaştırılabilir sınıf olduğu için bu çalışır. Bunları farklı şekilde sıralamak isterseniz, kendi karşılaştırıcınızı tanımlayabilirsiniz.

+0

Bu, güzel bir kod satırı, ancak Arrays.sort() yinelenen yerine boş döndürülüyor gibi görünüyor. Biraz dürterim. –

+3

@Thunder Rabbit, Özür dilerim !! Çok üzgünüm, haklısın. Bunu test etmeliydim. Cevabımı düzenledim. –

+0

Teşekkürler! Benim için çalışıyor ve (hala) oldukça basit! –

0

Önceki cevabın, bunu yapmanın en iyi yolu olduğunu düşünüyorum bence başka basit bir yol. sadece sıralanmış sonuçları yazdırmak için.

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

Bunu güncelledim, lütfen tekrar gözden geçirin. –

+0

numaralı telefondan şimdiden teşekkür ederiz, bunun neden doğru bir cevap olmadığını düşündüğünüze dair yorumunuzu bildirir misiniz? Yani, buna göre revize edebilirim. –

+1

-1 Dosya dizisini bir dizgi dizisine dönüştürmenin avantajını ve sıralama dizisini yalnızca kabul edilen yanıt olarak dosya dizisini sıralamaktan çok anlamıyorum. – zelanix

İlgili konular