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