2015-11-08 4 views
0

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

В основном у меня есть папка с изображениями с именами: 0.png до 100.png. Когда я пытаюсь загрузить их с следующим способом:

public static void buildImageList() { 
    Main.log("Building list of image files..."); 
    File[] files = new File(Constants.getImageLocation()).listFiles(); 
    int id = 0; 
    for (File file : files) { 
     if (file.isDirectory()) { 
      continue; 
     } 
     if (!file.getName().contains(".png") && !file.getName().contains(".jpg") && !file.getName().contains(".jpeg") && !file.getName().contains(".PNG")) { 
      continue; 
     } 
     imageFiles.add(new FileImage(id, fileToByteArray(file))); 
     id++; 
    } 
    Main.log("Found " + imageFiles.size() + " images in the folder!"); 
} 

Я получаю файлы не в упорядоченной последовательности: 0.png, 1.png, 10.png 11.png, и так далее.

Что мне нужно изменить, чтобы получить 0.png, 1.png, 2.png, 3.png?

+2

Thats потому что имена файлов являются «String» type – Ramanlfc

+1

Вы получаете естественный порядок строк. Чтобы получить что-то другое, вам нужно будет прочитать все имена файлов в списке и отсортировать его с помощью компаратора, который берет префикс имени файла и сравнивает его численно с другими. – Thevenin

+0

Откуда вы знаете порядок файлов? Ваш фрагмент кода печатает только страну. – Thevenin

ответ

0

Самый простой способ заключается в использовании:

Arrays.sort(files); 

java.io.File реализует Сопоставимые интерфейс, сравнивая имена путей лексически. Заказ фактически зависит от операционной системы. Если вам требуется какая-либо пользовательский заказ логика, вы можете предоставить собственный компаратор Массивы # вида() метод:

Arrays.sort(files, new CustomFileNameOrderingComparator()); 
0

Спасибо за ваше руководство, Я установил его, используя следующий код:

Arrays.sort(files, (o1, o2) -> { 
     final int id1 = Integer.parseInt(o1.getName().substring(0, o1.getName().indexOf("."))); 
     final int id2 = Integer.parseInt(o2.getName().substring(0, o2.getName().indexOf("."))); 
     final int result = Integer.compare(id1, id2); 
     return result != 0 ? result : (id1 - id2); 
    }); 
Смежные вопросы