Saya punya kode seperti di bawah ini:
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);
}
}
Ini FileFilter
berfungsi dengan baik, tetapi listFiles()
tampaknya mencantumkan file dalam urutan abjad terbalik. Adakah cara cepat untuk memberi tahu listFile()
daftar file dalam urutan abjad?
.endsWith(".xml")
saja.Jawaban:
The
listFiles
metode, dengan atau tanpa filter tidak menjamin urutan apapun.Namun, ia mengembalikan larik, yang dapat Anda urutkan
Arrays.sort()
.Ini berfungsi karena
File
merupakan kelas yang sebanding, yang secara default mengurutkan nama jalur secara leksikografis. Jika Anda ingin mengurutkan secara berbeda, Anda dapat menentukan pembanding Anda sendiri.Jika Anda lebih suka menggunakan Stream:
Pendekatan yang lebih modern adalah sebagai berikut. Untuk mencetak nama semua file dalam direktori tertentu, dalam urutan abjad, lakukan:
Ganti
System.out::println
dengan apa pun yang ingin Anda lakukan dengan nama file. Jika Anda hanya ingin nama file yang diakhiri dengan"xml"
do:Sekali lagi, ganti pencetakan dengan operasi pemrosesan mana pun yang Anda inginkan.
sumber
sort
.Saya pikir jawaban sebelumnya adalah cara terbaik untuk melakukannya di sini adalah cara sederhana lainnya. hanya untuk mencetak hasil yang diurutkan.
sumber
Di Jawa 8:
Urutan terbalik:
sumber
Arrays.sort(fList, Comparator.comparing(File::getName));
Ini kode saya:
sumber