Ich habe folgenden Code:
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);
}
}
Das FileFilter
funktioniert gut, listFiles()
scheint aber die Dateien in umgekehrter alphabetischer Reihenfolge aufzulisten. Gibt es eine schnelle Möglichkeit, listFile()
die Dateien in alphabetischer Reihenfolge aufzulisten?
.endsWith(".xml")
stattdessen Regex .Antworten:
Die
listFiles
Methode mit oder ohne Filter garantiert keine Bestellung.Es wird jedoch ein Array zurückgegeben, mit dem Sie sortieren können
Arrays.sort()
.Dies funktioniert, weil
File
es sich um eine vergleichbare Klasse handelt, die Pfadnamen standardmäßig lexikografisch sortiert. Wenn Sie sie anders sortieren möchten, können Sie Ihren eigenen Komparator definieren.Wenn Sie Streams bevorzugen:
Ein moderner Ansatz ist der folgende. Gehen Sie folgendermaßen vor, um die Namen aller Dateien in einem bestimmten Verzeichnis in alphabetischer Reihenfolge zu drucken:
Ersetzen Sie das
System.out::println
durch alles, was Sie mit den Dateinamen tun möchten. Wenn Sie nur Dateinamen möchten, die mit"xml"
just do enden:Ersetzen Sie den Druck erneut durch den gewünschten Verarbeitungsvorgang.
quelle
sort
.Ich denke, die vorherige Antwort ist der beste Weg, dies hier zu tun, ist ein anderer einfacher Weg. nur um die sortierten Ergebnisse zu drucken.
quelle
In Java 8:
Umgekehrte Reihenfolge:
quelle
Arrays.sort(fList, Comparator.comparing(File::getName));
Das ist mein Code:
quelle