Подтвердить что ты не робот

Как 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() список файлов в алфавитном порядке?

4b9b3361

Ответ 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));