Как отсортировать fileList() по дате последнего изменения?

как мне отсортировать этот массив, по дате изменения файла?

 String[] files =  fileList().;

Ответы (2 шт):

Автор решения: Михаил Буркевич

Попробуйте так:

String[] sorted =
    Files.list(Path.of("Path to files directory"))
        .sorted(Comparator.comparingLong(a -> a.toFile().lastModified()))
        .map(f -> f.getFileName().toString())
        .toArray(String[]::new);
→ Ссылка
Автор решения: gil9red

У вас массив строк, описывающих путь к файлам

Чтобы сортировать их по дате изменения нужно ее узнать. Узнать можно через объект File, используя метод lastModified, пример:

String[] fileNames = fileList();
System.out.println(Arrays.asList(fileNames));
for (String fileName : fileNames) {
    File file = new File(fileName);
    System.out.println(file + " -> " + file.lastModified());
}

Для сортировки массива используем Arrays.sort(T[], Comparator<? super T>).

Если передавать ему вторым параметром компаратор, а в нем вернуть дату последнего изменения, то получим отсортированный массив строк

Пример:

String[] fileNames = fileList();
System.out.println("BEFORE: " + Arrays.asList(fileNames));

Arrays.sort(fileNames, Comparator.comparingLong(fileName -> new File(fileName).lastModified()));

System.out.println("AFTER: " + Arrays.asList(fileNames));

UPD. Расширенный тест работы алгоритма, вывод даты изменения в формате dd/MM/yyyy HH:mm:ss:

public static String getFileLastModifiedStr(String fileName) {
    File file = new File(fileName);
    return new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(
            new Date(file.lastModified())
    );
}

Использование:

String[] fileNames = fileList();
System.out.println("BEFORE: ");
for (String fileName : fileNames) {
    System.out.println("    " + fileName + " -> " + getFileLastModifiedStr(fileName));
}

Arrays.sort(fileNames, Comparator.comparingLong(fileName -> new File(fileName).lastModified()));

System.out.println();

System.out.println("AFTER: ");
for (String fileName : fileNames) {
    System.out.println("    " + fileName + " -> " + getFileLastModifiedStr(fileName));
}
→ Ссылка