Tengo el siguiente código:
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á funcionando bien, pero listFiles()
parece estar listando los archivos en orden alfabético inverso. ¿Existe alguna forma rápida de decirle listFile()
que enumere los archivos en orden alfabético?
.endsWith(".xml")
en su lugar.Respuestas:
El
listFiles
método, con o sin filtro, no garantiza ningún pedido.Sin embargo, devuelve una matriz, con la que puede ordenar
Arrays.sort()
.Esto funciona porque
File
es una clase comparable, que por defecto ordena los nombres de ruta lexicográficamente. Si desea ordenarlos de manera diferente, puede definir su propio comparador.Si prefiere usar Streams:
Un enfoque más moderno es el siguiente. Para imprimir los nombres de todos los archivos de un directorio determinado, en orden alfabético, haga lo siguiente:
Reemplace el
System.out::println
con lo que quiera hacer con los nombres de archivo. Si solo desea nombres de archivo que terminen con"xml"
simplemente haga:Nuevamente, reemplace la impresión con la operación de procesamiento que desee.
fuente
sort
.Creo que la respuesta anterior es la mejor manera de hacerlo, aquí es otra forma sencilla. solo para imprimir los resultados ordenados.
fuente
En Java 8:
Orden inverso:
fuente
Arrays.sort(fList, Comparator.comparing(File::getName));
Este es mi codigo:
fuente