2010-07-29 2 views
6

Можно создать дубликат:
How do I find the last modified file in a directory in Java?Как получить файл с последней последней обновленной датой в Java?

У меня есть каталог файлов, которые нужно проверить на предмет изменений. Я считаю, что это изменилось, когда один из файлов имеет modifiedDate новее, чем то, что я помню из последней проверки (это означает, что это зависимость от кеша).

Что было бы самым быстрым способом найти последний измененный файл в каталоге на Java?


Возможно, я слишком оптимистичен, но я явно ищу что-то, что не требует итерации всех файлов.

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

+0

Является ли код Java единственным, что изменяет эти файлы? (Я так не думаю, но на всякий случай ...) –

+0

@Pablo Fernandez: Нет, это пользователи, вкладывающие в него новые вещи. – Tomalak

+0

Ммм ... возможно, есть обходное решение с событием IO. К сожалению, я не эксперт в этом, но надеюсь, что это даст намек всем, кто есть :). Удачи! –

ответ

2

Даже если вы не ищите итерации всех файлов, любой сторонний API, который вы используете для его поиска, будет перебирать все файлы.

JDK 7 предназначен для использования java.nio.WatchService, который, по-видимому, будет проходить через все, если потребуется, но будет использовать поддержку файловой системы для выполнения именно того, что вы просили. На минусовой стороне, that's still in the future.

+0

Я так и думал. Наверное, это то, что я в конечном итоге сделаю. – Tomalak

+0

На самом деле, будущее имеет что-то блестящее. Позвольте мне отредактировать мой ответ. –

+0

Спасибо за редактирование. :-) PS: Что-то вроде этого выполнимо в .NET уже (через 'System.IO.FileSystemWatcher'). – Tomalak

1

Необходимо перебрать все имена файлов и извлечь дату изменения.

0

Я думаю, что это невозможно. Вы можете использовать класс выполнения для EXEC командной строки Unix от Явы «LS -lrt | хвост -1» и разобрать строку, чтобы получить имя последнего измененного файла

+0

Я имею ввиду невозможность без прохождения всех файловых объектов в каталоге –

+0

Если у вас несколько тысяч файлов (и, возможно, когда-нибудь, вероятно, у вас будет), это не очень хорошая идея. – darpet

1

Смотреть это решение: How to get only 10 last modified files from directory using Java?

It это чистый код Java, но с простым взломом для повышения производительности.

+0

Я не уверен, правильно ли понимаю это решение: основные операции - «получить каждый файл, посмотреть его дату». Они не быстрее, чем в старомодном цикле. Итак, улучшение скорости происходит от выполнения сортировки на лету? – Tomalak

+0

Вы правы. Его не быстрее, чем цикл, но есть только один цикл. Любое другое портативное решение (чистая java, без экранирования для конкретных команд ОС и т. Д.) Понадобится 1 цикл, чтобы получить все файлы, а затем еще один цикл над файлами, чтобы получить последний измененный. Это спасет этот второй цикл, поместив эту логику в первый цикл. – rahulmohan

+0

Спасибо за разъяснение. :) Однако, чтобы быть абсолютно честным: это конкретное решение предназначалось для использования в контексте ColdFusion, который работает поверх Java. Вы можете управлять объектами Java в ColdFusion, но невозможно реализовать интерфейсы или любые другие передовые материалы. Я скорее не хочу писать свой собственный Java-класс для этой проблемы, поэтому я оставил его в «do two loops». На данный момент это достаточно хорошо. * PS: Используйте ответы @ в комментариях или ваши ответы могут остаться незамеченными. (Только комментарии на чей-то собственный пост, например, я комментирую ваш ответ, не нуждаются в @ ответе.) * – Tomalak

 Смежные вопросы

  • Нет связанных вопросов^_^