Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Сортировка файлов в каталоге


Автор: Junky2255 28.3.2012, 21:58
Доброго времени суток. Такая ситуация:
Имеется каталог, в нем файлы. Нужно отсортировать их по дате создания (в любом порядке), либо просто вычислить самый старый и удалить. Как удалять понятно, но как найти "дедушку" уже нет. Подскажите, пожалуйста. 
Вообще начал так:
Код

File f = new File("с:/dir/");
File list[];
list = f.listFiles();

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

Автор: ashain 28.3.2012, 22:47
Можно отсортировать массив файлов по дате последней модификации, думаю это то что нужно

Автор: Junky2255 28.3.2012, 22:59
Да, можно по дате, но у меня файлы не изменяются вообще. Это файлы, в которые я сериализую объекты. Потом десериализую когда нужно. Т.е. с самим содержимым файла я ничего не делаю. Если только насильно дописывать пару символов, например, и смотреть дату (т.е. файл создается, тут же изменяется. Смотрим дату, сортим). Только для этого нужно поток новый создавать. Интересно есть ли более простые варианты?

Автор: ashain 28.3.2012, 23:02
Ну в таком случае по первому вопросу можно отсортировать массив, например так:

Код

File f = new File("/home/myfiles");

File [] files = f.listFiles();

Arrays.sort( files, new Comparator()
{
    public int compare(Object o1, Object o2) {

        if (((File)o1).lastModified() > ((File)o2).lastModified()) {
            return -1;
        } else if (((File)o1).lastModified() < ((File)o2).lastModified()) {
            return +1;
        } else {
            return 0;
        }
    }

}); 

Автор: Junky2255 28.3.2012, 23:07
Большое спасибо, попробую разобраться  smile 

Автор: LSD 29.3.2012, 10:34
Вообще говоря сортировка всего массива, для того чтобы найти максимум/минимум это overkill. Вот выйдет "гуру" из бана, и расскажет вам про недопустимость использования алгоритма O(n log(n)) когда можно обойтись O(n)  smile 
Код

    private static File getOldest(File[] files) {
        if (files == null || files.length == 0) {
            return null;
        }

        File oldest = files[0];
        for (File file : files) {
            if (file.lastModified() < oldest.lastModified()) {
                oldest = file;
            }
        }
        return oldest;
    }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)