#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
.
С уважением.