Я встречаюсь с повторяющейся проблемой в приложении, которое отслеживает содержимое файлов в каталоге на основе Java 7 WatchService API. Когда базовая файловая система запускает событие изменения в файле, я хочу сразу вычислить его SHA-256.Java I/O: убедитесь, что файл не заблокирован другим процессом перед любой работой r/w.
Но часто случается, что другой процесс имеет открытый файл (т. Е. Word), тем самым задерживая исключительную блокировку и предотвращая мое приложение из любой операции чтения/записи. Если какой-либо поток/канал создается против открытого файла, FileNotFoundException или FileSystemException для NiO API, отбрасывается с сообщением вроде:
Процесс не может получить доступ к файлу, так как он используется другим процессом
Я не смог найти решение, которое обнаруживало бы такие случаи, не маскируя «реальное» FileNotFoundException, когда файл фактически не существует на fs.
У меня возникла идея проверить существование через File.exists, а затем, если FileNotFoundException вызывается, когда я открываю поток, я бы мог сделать вывод, что файл заблокирован. Я открыт для любого ввода!
Спасибо!
когда-нибудь найти решение этой проблемы? –
В итоге я использовал эвристику, если File.exists возвращает true в блоке catch FileNotFoundException. Я интерпретирую его как заблокированный файл. – sylvain