Как отсортировать 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));
}