Сортировать массив файловых путей по имени файла - PullRequest
0 голосов
/ 15 мая 2019

Я использую directory.listFiles() для рекурсивного получения списка файлов из заданной структуры каталогов.Я попытался использовать следующие коды для этой цели, но ни один из них не работает.

    Arrays.sort(fList, Comparator.comparing(File::getName));
    Arrays.sort(fList, NameFileComparator.NAME_COMPARATOR);

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

Ответы [ 3 ]

4 голосов
/ 15 мая 2019

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

 Arrays.sort(fList);

Если вы хотите отсортировать их по-другому, вы можете определить свой собственный компаратор.

2 голосов
/ 15 мая 2019

Если вы хотите рекурсивно отсортировать все пути к файлам в древовидной структуре, вы можете попробовать Files.walk, используя sorted с потоком Java 8:

List<String> files = Files.walk(Paths.get("/tmp"))
                         .filter(Files::isRegularFile) // Check you have only file names
                         .map(Path::toString) // map to string
                         .sorted() // sort
                         .collect(Collectors.toList()); // create list

Если вы хотите сортировку без учета регистра:

List<String> files = Files.walk(Paths.get("d:/tmp"))
                         .filter(Files::isRegularFile) // Check you have only file names
                         .map(Path::toString) // map to string
                         .sorted(Comparator.comparing(String::toLowerCase)) // sort case insensitive
                         .collect(Collectors.toList()); // create list
1 голос
/ 15 мая 2019

Чтобы вывести список всех файлов в каталоге и подкаталогах, используйте Apache Commons FilesUtil.listFiles метод

Collection<File> fCollection = FileUtils.listFiles(directory, null, true);
File[] fList = fCollection.toArray(new File[fCollection.size()]);

Затем для сортировки массива вы можете просто использовать

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