Я хочу использовать WatchService Java 7 для мониторинга изменений в каталоге.
Кажется, он пытается заблокировать папку и будет генерировать исключение, если он не работает, но, похоже, не предоставляет какой-либо метод блокировки его перед проверкой, если он уже заблокирован.Java - как узнать, используется ли какой-либо каталог другим процессом?
Мне нужно знать, используется ли какой-либо каталог другим процессом или нет. Так как я не могу заблокировать его или открыть для него поток (потому что это каталог), я ищу что-то более умное, чем пытаюсь изменить его и спать, если не удалось, или попробуйте/поймать сон.
В идеале, я бы хотел заблокировать вызов, пока он не будет доступен.
EDIT: Я не могу получить FileLock в папке. Когда я пытаюсь заблокировать папку, я получаю «FileNotFoundException (доступ запрещен)». Googling предлагает вам не использовать этот объект в каталоге.
Регистрационный код:
WatchService watchService = path.getFileSystem().newWatchService()
path.register(watchService,
StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_MODIFY,
StandardWatchEventKinds.ENTRY_DELETE)
В противном случае сценарий:
Допустим, я слушаю папку f
для создания нового.
Если в нем создана подкатегория g
, я хочу послушать изменения в g
. Однако, если я создаю новую папку в f
(в Windows), это приведет к сбою, поскольку Windows блокирует папку до тех пор, пока не будет указано имя.
Благодаря
Зачем вам нужно знать, используется ли он другим процессом, если все, что вы хотите, отслеживает его изменения? –
, потому что регистр метода (http://docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html#register(java.nio.file.WatchService,java.nio.file. WatchEvent.Kind ...)), который регистрирует изменения, генерирует исключение, если каталог используется. – Gal
@Gal вы можете разместить код? –