Не существует надежного кроссплатформенного способа пассивного уведомления, когда у файла есть другой создатель записи - то есть, вызвать исключение, если файл уже открыт для записи. Однако есть несколько методов, которые помогут вам активно проверить это.
Если файл может использоваться несколькими процессами (которые могут быть смесью Java и не-Java), используйте FileLock
. Ключ к успешному использованию блокировок файлов - помнить, что они только «рекомендательные». Блокировка гарантированно будет видимой, если вы проверите ее, но она не помешает вам что-то сделать с файлом, если вы забудете. Все процессы, которые обращаются к файлу, должны быть разработаны для использования протокола блокировки.
Если с файлом работает один процесс Java, вы можете использовать встроенные в Java инструменты параллелизма, чтобы сделать это безопасно. Вам нужна карта, видимая всем потокам, которая связывает каждое имя файла с соответствующим экземпляром блокировки. Ответы на связанный вопрос можно легко адаптировать для этого с File
объектами или каноническими путями к файлам. Объектом блокировки может быть FileOutputStream
, некоторая обертка вокруг потока или ReentrantReadWriteLock
.