2011-08-26 49 views
71

Ho codice come di seguito:come file.listFiles in ordine alfabetico?

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); 
     } 
} 

Il FileFilter sta lavorando bene, ma listFiles() sembra essere che elenca i file in ordine alfabetico inverso. C'è un modo rapido per dire allo listFile() di elencare i file in ordine alfabetico?

+0

Ho appena modificato la mia risposta. Dovrebbe adattarsi alle tue esigenze ora. –

+0

Grazie per la modifica, Konstantin. Recentemente ho lavorato su Android e questo dettaglio mi è sfuggito di mente. ;-) –

+0

Invece di usare espressioni regolari, usa invece '.endsWith (". Xml ")'. – Fred

risposta

176

Il metodo listFiles, con o senza filtro, non garantisce alcun ordine.

Tuttavia, restituisce un array, che è possibile ordinare con Arrays.sort().

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

Questo funziona perché File è una classe paragonabile, che per i tipi predefiniti pathname lessicografico. Se si desidera ordinarli in modo diverso, è possibile definire il proprio comparatore.

+0

Questa è una bella riga di codice, ma Arrays.sort() sembra restituire void, invece di Iterable. Mi giro un po '. –

+3

@Thunder Rabbit, le mie scuse !! Mi dispiace, hai ragione. Avrei dovuto provarlo. Ho modificato la mia risposta. –

+0

Grazie! funziona per me ed è (ancora) abbastanza semplice! –

0

Penso che la risposta precedente sia il modo migliore per farlo qui è un altro modo semplice. solo per stampare i risultati ordinati.

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

Ho aggiornato questo per favore riconsiderare. Grazie in anticipo, –

+0

, ti preghiamo di fornire un commento perché ritieni che questa non sia una risposta corretta. Quindi, posso correggerlo di conseguenza. –

+1

-1 Davvero non capisco il vantaggio di convertire l'array di file in un array di stringhe e quindi di ordinare piuttosto che ordinare l'array di file come fa la risposta accettata. – zelanix

Problemi correlati