можем ли мы определить во время выполнения, удален ли файл с жесткого диска или нет с помощью Java - PullRequest
0 голосов
/ 21 декабря 2009

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

Ответы [ 3 ]

3 голосов
/ 21 декабря 2009

Если вы хотите узнать, существует ли уже определенный файл, который вы уже знаете, вы можете просто использовать File.exists(). Существуют пакеты наблюдателя каталога, которые будут вызывать события, когда файлы добавляются / удаляются / перемещаются, но запуск потока наблюдателя каталога в каждом каталоге вашей файловой системы звучит очень неэффективно.

1 голос
/ 21 декабря 2009

До появления JDK 7 в Java не существует неродного механизма для обнаружения событий, связанных с файлами (включая удаления). Тем не менее, даже если бы вы смогли обнаружить удаление файлов, вам все равно понадобился бы некоторый алгоритм для синхронизации ваших индексов при запуске приложения.

Когда мы делаем такие вещи, мы обычно фиксируем путь + дату изменения + длину файла в индексе (мы используем jdbm btrees). Тогда для повторной индексации необходимо выполнить итерацию дерева папок и индекса одновременно. Когда вы найдете в индексе запись, которой нет в дереве папок, удалите ее из индекса. Когда вы найдете в дереве папок запись, которой нет в индексе, добавьте ее в индекс. Если вы найдете запись, которая есть в обоих, проверьте дату и размер изменения.

Так что, пока у нас не будет jdk7, вы в значительной степени застрянете с решением на основе опроса (то есть обновите индексы каждые XX секунд).

Обратите внимание, что jdk7 (в дополнение к мониторингу папок) значительно улучшит производительность при переборе файлов (текущие операции с файлами действительно медленны по сравнению с тем, что вы можете делать изначально).

1 голос
/ 21 декабря 2009

Я думаю, что Java 7 может иметь то, что вы ищете, когда он выйдет. Обратитесь к следующей ссылке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...