java File.listFiles () в ОС Windows не является логически последовательным - PullRequest
2 голосов
/ 28 марта 2012

Возможно, на этот вопрос уже отвечали, но я не смог его найти.В основном это проблема.У меня есть список файлов изображений в каталоге.Они пронумерованы от 1-n, где n-s больше 10. В моей программе я создаю объект file, указывающий на каталог, в котором находятся файлы, и затем вызываю "listFiles ()" для объекта file.Он возвращает файлы, но в следующем порядке:

filename1.jpg
filename10.jpg
filename11.jpg
...
filename2.jpg
filename20.jpg
filename21.jpg
...

Эта ОС сообщает об этом файле?Как я могу остановить это от этого?

Ответы [ 4 ]

4 голосов
/ 28 марта 2012

В документации четко указано

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

Так что вам просто не следует полагаться на это. Вы можете отсортировать их, если хотите получить всегда один и тот же порядок, используя:

Arrays.sort(Object[] object);

или

Arrays.sort(T[] a, Comparator<? super T> c);
3 голосов
/ 28 марта 2012

просто используйте java.util.Collections.sort(list, comparator) и внедрите свой собственный java.util.Comparator, если вам не нравится, как он сортируется.Я думаю, это зависит от ОС, как файлы сортируются в этом массиве.

2 голосов
/ 28 марта 2012

Кажется, все в порядке.Попробуйте нумеровать их с ведущими нулями, т.е.указал, что лучший способ сделать это - отсортировать это самостоятельно.Таким образом, вы не будете полагаться на какое-либо неопределенное поведение.Я привел пример того, как сделать это с сопоставлением с регулярным выражением:

1 голос
/ 28 марта 2012

Как сказано в документации listFiles ():

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

Таким образом, вы можете назвать их так, как говорит Рекин, а затем отсортировать имена файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...