В каком порядке файлы в каталоге по умолчанию считываются Java listFiles()?

#java #java-io

#java #java-io

Вопрос:

Я создал следующую программу, которая считывает все файлы в каталоге. Все имена файлов состоят из чисел (например 10023134.txt ).

 File dir = new File(directoryPath);
File[] files = dir.listFiles();
for (File file : files)
    try {
        if ( !file.exists())
            continue;
        else if (file.isFile()) {
            // some process
        }
    } catch (Exception e) {}
  

Я хотел бы знать, в каком порядке файлы в каталоге считываются по умолчанию.

Кажется, что программа не считывает файлы ни в числовом порядке, ни в порядке даты создания.

Комментарии:

1. почему бы вам не распечатать имена файлов и не убедиться в этом самостоятельно?

Ответ №1:

Как указано в JavaDoc:

Нет никакой гарантии, что строки имен в результирующем массиве будут отображаться в каком-либо определенном порядке; в частности, не гарантируется, что они будут отображаться в алфавитном порядке.

Если вы хотите, чтобы они были отсортированы, вам придется сортировать их самостоятельно.

Обратите внимание, что если вы сортируете, используя порядок по умолчанию, вы все равно получите разные результаты в зависимости от вашей ОС. Опять же из JavaDoc:

Порядок, определенный этим методом, зависит от базовой системы. В системах UNIX буквенный регистр имеет значение при сравнении путей; в системах Microsoft Windows это не так.

Ответ №2:

Порядок файлов, скорее всего, определяется порядком по умолчанию в ОС (или нейтральным списком) и будет зависеть от того, как ОС возвращает список файлов обратно в Java.

Нет никакой гарантии порядка, в котором файлы могут быть возвращены.

Вы могли бы использовать Arrays.sort(T[] Comparator<? super T> c) для сортировки списка после его прочтения.

Комментарии:

1. хотя это, вероятно, верно для большинства реализаций метода, в документах нет ничего, гарантирующего такое поведение

2. @SillyFreak Это правда, в документах также ничего не сказано так или иначе, кроме того, что порядок не гарантируется

Ответ №3:

Файлы сортируются в естественном порядке вашей операционной системы. Это может быть порядок создания. Если вы хотите, чтобы список был отсортирован, вы можете вызвать

 File[] files = Arrays.sort(dir.listFiles())
  

Для другого порядка сортировки не стесняйтесь использовать свой собственный Comparator .
С уважением.