Ввод-вывод Java: убедитесь, что файл не заблокирован другим процессом перед любой операцией чтения / записи.

Я сталкиваюсь с повторяющейся проблемой в приложении, которое отслеживает содержимое файлов в каталоге на основе Java 7 WatchService API. Когда базовая файловая система запускает событие модификации файла, я хочу сразу вычислить его SHA-256.

Но часто случается, что другой процесс открывает файл (например, Word), таким образом удерживая монопольную блокировку и не позволяя моему приложению выполнять какие-либо операции чтения / записи. Если какой-либо поток / канал создается для открытого файла, возникает исключение FileNotFoundException или FileSystemException для API nio с сообщением вроде:

Процесс не может получить доступ к файлу, потому что он используется другим процессом

Я не был ' t может предложить решение, которое обнаружит такие случаи без маскировки «реального» FileNotFoundException, когда файл на самом деле не существует на fs.

Мне пришла в голову идея проверить существование с помощью File.exists, а затем, если при открытии потока возникает исключение FileNotFoundException, я мог бы сделать вывод, что файл заблокирован. Я открыт для любых комментариев по этому поводу!

Спасибо!

9
задан ajduke 24 March 2013 в 23:14
поделиться