2012-01-10 2 views
8

Использование JDK 7 я имел успех в просмотре отдельных каталогов для новых творений файлов, удаления и модификации с использованием java.nio.file.StandardWatchEventKinds. *Детектирование вновь созданных файлов, хотя Java в режиме реального времени

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

Я хочу сделать это, чтобы вычислить сумму MD5 для каждого нового файла.

Спасибо за любые советы, которые вы можете предложить.

+0

Определить «независимо от их пути»? Одна файловая система? Любое записываемое монтирование? Кроме того, какая операционная система? (Короткий ответ: «Нет», но может быть оговорка в зависимости от ОС) –

+0

Просто Windows 7/NTFS. Я бы хотел контролировать все смонтированные тома. Я тестирую JNotify как одно из возможных решений. Спасибо – JonnyKash

ответ

0

Хорошо, короткий ответ Я не думаю, что Java может это сделать из коробки. Вам нужно либо перехватить вызовы в операционную систему, которые потребуют чего-то ближе к голым металлам, или вы могли бы сделать так, как было предложено в another answer, и зарегистрировать слушателей в каждой папке от корня вниз, не говоря уже о других дисках в случае оконные машины.

Первый подход потребует специального JNI, который предполагает, что ОС имеет такой крючок и позволяет получить доступ к коду пользователя.

Второй подход будет работать, но может потребовать большой объем памяти для отслеживания всех слушателей. В окне щелкните правой кнопкой мыши на c: \ и выберите и посмотрите, сколько папок мы говорим.

+0

Спасибо. Я нашел, что библиотека [JNotify] (http://jnotify.sourceforge.net/) отлично работает для этого. – JonnyKash

0

Одна из возможностей - не такая удобная, но возможность - это ходить по дереву каталогов для каталогов, которые вы хотите посмотреть, регистрируя их в WatchService. Это не очень хороший способ сделать это, и это может быть проблемой в зависимости от того, насколько велика фактическое дерево каталогов.

0

Я не знаю, как StandardWatchEvents (хотя это звучит удобно).

Одним из способов сделать то, что вы хотите, является использование собственного API окон, такого как ReadDirectoryChangesW (или изменения тома). Это больно, но работает (было там, сделано, хотелось бы, чтобы у меня был другой вариант в то время).

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