Я хочу использовать WatchService java 7 для отслеживания изменений в каталоге.
Кажется, он пытается заблокировать папку и выдает исключение в случае сбоя, но, похоже, не предоставляет никакого метода блокировки заранее / проверка, если он уже заблокирован.
Мне нужно знать, используется ли каталог в настоящее время другим процессом или нет. Поскольку я не могу заблокировать его или открыть для него поток (потому что это каталог), я ищу что-то более разумное, чем пытаться изменить его и заснуть в случае неудачи или попробовать/поймать со сном.
В идеале хотелось бы блокирующий вызов, пока он не доступен.
РЕДАКТИРОВАТЬ: я не могу получить FileLock в папке. Когда я пытаюсь заблокировать папку, я получаю «FileNotFoundException (доступ запрещен)». Поиск в Google предполагает, что вы не можете использовать этот объект в каталоге.
Регистрационный код:
WatchService watchService = path.getFileSystem().newWatchService()
path.register(watchService,
StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_MODIFY,
StandardWatchEventKinds.ENTRY_DELETE)
Неудачный сценарий:
Допустим, я прослушиваю папку f
для нового создания.
Если в ней создается подпапка g
, я хочу прослушивать изменения в g
. Однако, если я создам новую папку в f
(в Windows), это не удастся, потому что Windows блокирует папку до тех пор, пока не будет задано имя.
Спасибо
The Watch Service API takes advantage of this support[native support for file change notification] where available. However, when a file system does not support this mechanism, the Watch Service will poll the file system, waiting for events.
Думаю, проблема в этом - person boxed__l   schedule 10.08.2013