Я использую WatchService
для файлов данных синхронизации с помощью приложения workbench. Когда я переименую/перемещаю наблюдаемый каталог, я не получаю никакого события, и WatchKey не станет недействительным. Я все еще получаю события из переименованного каталога, но насколько я знаю, нет способа узнать фактический Путь к WatchKey, кроме WatchKey.watchable()
который, тем не менее, возвращает исходный путь к каталогу. Я хотел бы избежать необходимости блокировки наблюдаемого каталога от изменений, так как я хочу, чтобы приложение было как можно более легким.
Я столкнулся с этой проблемой с JDK 7u10 в Windows 7
Известно ли вам обходное решение этой проблемы без блокировки каталога или просмотра всех каталогов в корне?
UPDATE
В Linux я наблюдал такое же поведение.
Пока кажется, что у меня есть три варианта.
1) Положитесь на пользовательскую дисциплину, чтобы он не перемещал каталоги данных. Мне не нравятся эти параметры, поскольку это может привести к поведению undefined.
2) Используйте более обширную нестандартную собственную библиотеку
3) Создайте иерархию сторожевых устройств на высших каталогах. Они будут принимать только события ENTRY_DELETE
, поскольку это событие (или OVERFLOW
) должно появиться в тот момент, когда фактический просмотренный каталог перемещается или удаляется и, таким образом, недействителен.