Member 13939515 Ответов: 1

Как я могу сортировать файлы и папки в каталоге, используя их дату


Эй Ребята,

Я ищу код, в котором я могу сортировать файлы и папки (особенно файлы) в каталоге на основе их даты и имени. Например, предположим, что я хочу сортировать файлы по их именам, начинающимся с буквы "S". После этого я хочу еще раз отсортировать эти отсортированные файлы на основе их даты. Так что каждый день я могу получать файлы одной и той же даты.

До сих пор я сортировал файлы по их именам. Но как сортировать файлы на основе их даты, я не могу понять. Ребята, не могли бы вы помочь мне с образцом кода?
Я прилагаю свой код в следующем разделе.

Что я уже пробовал:

количество упаковок;
импорт java.io.*;
импорт java.util.список ArrayList;
импорт java.util.List;

открытый класс Newcount2 {

публичный статический пустота главный(строка[] аргументы) {
Список<строка&ГТ; файлы = новый ArrayList и Л;&ГТ;();
Список<string> каталогов = новый ArrayList< & gt;();
Список<строка> У smallScount = новый ArrayList и Л;&ГТ;();
List<string> capScount = новый ArrayList< & gt;();

File folder = новый файл("путь к каталогу");
Файл[] папку listOfFiles =.файл-список();

for (int i = 0; i < listOfFiles.длина; i++) {
if (listOfFiles[i].isFile()) {
файлов.добавить(listOfFiles[я].метод getname());
} else if (listOfFiles[i].isDirectory()) {
каталоги.добавить(listOfFiles[я].метод getname());
}
}

//разделение файлов с заглавными буквами S и маленькими буквами S.

System.out.println("файлы с s и S.");
for (String file : файлы) {
если(файл.как startswith("с"))
smallScount.add(файл);
если(файл.как startswith("с"))
capScount.add(файл);
}

/* System.out.println("список файлов :\n---------------");
for(String fName: files) Системы.из.код println(имени,);

System.out.println("\nList каталогов :\n---------------------");
for(String dName: каталоги) System.out.println(имя пользователя);*/

/* System.out.println("список файлов с маленькими буквами "S": \n---------------");
for(String fName: smallScount) Системы.из.код println(имени,);*/
/*
System.out.println("список файлов с заглавной буквы 'S' :\n---------------");
for(String fName: capScount) Системы.из.код println(имени,);*/

System.out.println("количество файлов с маленькими буквами "S": \n---------------");
Системы.из.код println(smallScount.размер());

Системы.из.println("число файлов с заглавной буквы С :\Н---------------");
Системы.из.код println(capScount.размер());

}
}

1 Ответов

Рейтинг:
0

Jochen Arndt

Воспользуйся Arrays.sort() (видеть Массивы (Java Platform SE 7 )[^]) с помощью Компаратор (Java Platform SE 7 )[^].

Вы можете выполнить сортировку на вашем оригинале listOfFiles массив или используйте копию, если это необходимо сохранить.

Непроверенный пример, который не делает различий между файлами и папками:

Arrays.sort(listOfFiles, new Comparator<File>(){
    public int compare(File f1, File f2)
    { 
        // Names beginning with 's' on top
        boolean s1 = f1.getName().startsWith("s") || f1.getName().startsWith("S");
        boolean s2 = f2.getName().startsWith("s") || f2.getName().startsWith("S");
        if (s1 && !s2)
            return -1;
        if (s2 && !s1)
            return -1;
        // Everything else including both names beginning with 's' is sorted by date
        return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
    } });


Member 13939515

Привет Йохен,
Спасибо за ваш ответ. Но одна часть не ясна, вы использовали f1.lastModified(), это то же самое, что дата создания? Могу ли я получить дату создания, используя java-код в том же требовании???

Jochen Arndt

Чтобы получить дату создания, вы должны получить атрибуты файла. Поищите в интернете что-нибудь вроде "дата создания файла java".

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