Eu tenho o código abaixo:
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);
}
}
O FileFilter
está funcionando bem, mas listFiles()
parece listar os arquivos em ordem alfabética reversa. Existe alguma maneira rápida de dizer listFile()
para listar os arquivos em ordem alfabética?
.endsWith(".xml")
.Respostas:
O
listFiles
método, com ou sem filtro, não garante nenhum pedido.No entanto, ele retorna uma matriz, com a qual você pode classificar
Arrays.sort()
.Isso funciona porque
File
é uma classe comparável, que por padrão classifica os nomes de caminho lexicograficamente. Se quiser classificá-los de forma diferente, você pode definir seu próprio comparador.Se você preferir usar Streams:
Uma abordagem mais moderna é a seguinte. Para imprimir os nomes de todos os arquivos em um determinado diretório, em ordem alfabética, faça:
Substitua o
System.out::println
com o que você deseja fazer com os nomes dos arquivos. Se você quiser apenas nomes de arquivos que terminam com,"xml"
faça o seguinte:Novamente, substitua a impressão por qualquer operação de processamento que você deseja.
fonte
sort
.Acho que a resposta anterior é a melhor maneira de fazer isso aqui é outra maneira simples. apenas para imprimir os resultados classificados.
fonte
Em Java 8:
Ordem reversa:
fonte
Arrays.sort(fList, Comparator.comparing(File::getName));
Este é o meu código:
fonte