WatchService выглядит как отличная технология, но она слишком медленная, чтобы быть полезной в системах OS X и Linux, на которых я тестировал.Чтобы добавить оскорбление к травме, он также не получает уведомления обо всех событиях.
Это касается как моего собственного кода, так и канонического примера из Oracle.(http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/essential/io/examples/WatchDir.java)
Я понимаю, что порт OS X OpenJDK не уверен в этих функциях (см. https://wikis.oracle.com/display/OpenJDK/Mac+OS+X+Port+Project+Status)
Кто-нибудь успешно использовал это в работе?
У меня гораздо лучшее время отклика, если я изменю
folder.register(watcher, StandardWatchEventKinds.ENTRY_MODIFY);
на
folder.register(watcher, new WatchEvent.Kind[]{StandardWatchEventKinds.ENTRY_MODIFY}, SensitivityWatchEventModifier.HIGH);
JDK 7 еще не имеет встроенной реализации WatchService для MacOS.Вместо прослушивания событий собственной файловой системы он использует резервный sun.nio.fs.PollingWatchService, который периодически проходит через файловую систему и проверяет последнюю измененную метку времени каждого файла и подкаталога в дереве.Я также обнаружил, что он необычайно медленный.
Существует встроенная реализация WatchService для Mac:
http://code.google.com/p/barbarywatchservice/
Я не пытался его использоватья.