Вопросы мониторинга каталогов Java 7

Я только что увидел потрясающую функцию с Java 7, наблюдатель каталога. Он сообщит вам, когда что-то изменилось в каталоге, не опрашивая каталог.

1.) Но он говорит, что возвращается к опросу, если файловая система не поддерживает регистрацию событий изменений. Все ли типичные файловые системы Linux и Windows(extX,ntfs,reiserXXX,jsf,zfs) поддерживают эту функцию?

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

2 ответа

Решение

Похоже, вы говорите о WatchService.

Формулировка события ENTRY_CREATE гласит, что новая запись будет восприниматься, если создается новый файл или файл переименовывается в каталог. В нем отсутствует уточнение того, какие события запускаются, если файл переименовывается и остается в том же каталоге.

Формулировка также гласит, что то, основана ли служба на операционной системе или опросе, зависит от реализации. Я подозреваю, что это реализация JRE, поэтому даже если вы знаете, что ее поддерживает определенная ОС, это не гарантирует, что служба будет использовать функциональность уровня ОС или прибегнет к опросу. На самом деле, служба не предоставляет никакого способа определить, использует ли она опрос или функцию уровня ОС вообще.

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

Если вы играете с ним в Windows и Linux, вы увидите много различий в поведении. Так что Java на самом деле не пытается обеспечить последовательную независимую от платформы абстракцию. Вы должны протестировать свое приложение на тех операционных системах, которые вас интересуют (ну, их всего 2).

WatchService отстой больше, чем вы можете себе представить. Приготовьтесь к разочарованию, если вы действительно погрузитесь в это.

Другие вопросы по тегам