Как File.listFiles в алфавитном порядке?
У меня есть код, как показано ниже:
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);
}
}
FileFilter
работает красиво, но listFiles()
похоже, перечисляет файлы в обратном алфавитном порядке. Есть ли какой-нибудь быстрый способ сообщить listFile()
список файлов в алфавитном порядке?
Ответы
Ответ 1
Метод listFiles
, с или без фильтра, не гарантирует никакого порядка.
Однако он возвращает массив, который вы можете отсортировать с помощью Arrays.sort()
.
File[] files = XMLDirectory.listFiles(filter_xml_files);
Arrays.sort(files);
for(File _xml_file : files) {
...
}
Это работает, потому что File
- это сопоставимый класс, который по умолчанию сортирует пути лексикографически. Если вы хотите отсортировать их по-разному, вы можете определить свой собственный компаратор.
Ответ 2
Я думаю, что предыдущий ответ - лучший способ сделать это здесь - еще один простой способ. просто распечатать отсортированные результаты.
String path="/tmp";
String[] dirListing = null;
File dir = new File(path);
dirListing = dir.list();
Arrays.sort(dirListing);
System.out.println(Arrays.deepToString(dirListing));