2011-08-26 19 views
71

Tengo código de la siguiente manera:cómo File.listFiles en orden alfabético?

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

El FileFilter está trabajando muy bien, pero listFiles() parece ser una lista de los archivos en orden alfabético inverso. ¿Hay alguna manera rápida de decirle a listFile() que liste los archivos en orden alfabético?

+0

Acabo de editar mi respuesta. Debería adaptarse a sus necesidades ahora. –

+0

Gracias por la edición, Konstantin. Solo he estado trabajando en Android recientemente, y ese detalle se me olvidó. ;-) –

+0

En lugar de usar regex, use '.endsWith (". Xml ")' en su lugar. – Fred

Respuesta

176

El método listFiles, con o sin filtro no garantiza ningún pedido.

Sin embargo, devuelve una matriz, que puede ordenar con Arrays.sort().

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

Esto funciona porque File es una clase comparable, que por defecto los nombres de ruta tipo lexicográfico. Si desea ordenarlos de manera diferente, puede definir su propio comparador.

+0

Esta es una hermosa línea de código, pero Arrays.sort() parece volver vacía, en lugar de un Iterable. Voy a hurgar un poco. –

+3

@Thunder Rabbit, Mis Disculpas !! Lo siento, tienes razón. Debería haberlo probado. Edité mi respuesta. –

+0

¡Gracias! ¡funciona para mí y es (todavía) bastante simple! –

0

Creo que la respuesta anterior es la mejor manera de hacerlo aquí es otra manera simple. solo para imprimir los resultados ordenados

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

He actualizado esto por favor, reconsidere. Gracias de antemano –

+0

, por favor, déjenme comentar por qué cree que esta no es una respuesta correcta. Entonces, puedo revisarlo en consecuencia. –

+1

-1 Realmente no entiendo la ventaja de convertir la matriz de archivos a una matriz de cadenas y luego ordenar en lugar de simplemente ordenar la matriz de archivos como lo hace la respuesta aceptada. – zelanix

Cuestiones relacionadas