Обнаружение вновь созданных файлов через Java в режиме реального времени - PullRequest
8 голосов
/ 10 января 2012

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

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

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

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

Ответы [ 3 ]

0 голосов
/ 13 января 2012

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

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

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

0 голосов
/ 13 января 2012

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

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

0 голосов
/ 11 января 2012

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

...