Pregunta cómo File.listFiles en orden alfabético?


Tengo el código como a continuación:

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

los FileFilter funciona bien, pero listFiles() parece estar enumerando los archivos en orden alfabético inverso. ¿Hay alguna manera rápida de contar listFile() para enumerar los archivos en orden alfabético?


74
2017-08-26 04:04


origen


Respuestas:


los listFiles método, con o sin filtro no garantiza ningún orden.

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 clasifica por defecto las rutas de acceso lexicográficamente. Si desea ordenarlos de manera diferente, puede definir su propio comparador.


181
2017-08-26 04:08



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
2017-09-07 18:57