Чтение файла журнала, который заблокирован другим приложением

Я хочу получить доступ к файлу журнала, который заблокирован сторонним Java-приложением. Файл заблокирован на весь день и будет выпущен на следующий день. Тем не менее, моя цель - прочитать его сейчас, используя RandomAccessFile (должен использовать этот класс, потому что мне нужно начинать/сохранять последнюю позицию во время чтения), не дожидаясь завтра.

В настоящее время я могу читать журнал, только если я разблокирую его с помощью программного обеспечения Unlocker. Может ли кто-нибудь предложить какие-либо jar/утилит, которые я могу использовать в своей Java-программе для достижения моей цели?

Ответ 1

Предполагая, что вы используете операционную систему Microsoft:
Программное обеспечение Теневое копирование использует с помощью Microsoft volume-shadow-service (VSS) для копирования заблокированных файлов. Вы можете использовать программное обеспечение из Java Runtime Environment или использовать VSS-API через Java Native Interface.

Моим подходом было бы файл, а затем получить доступ к контенту через него. Недостатком является то, что вы, возможно, читаете устаревшую информацию, если файл обновлен с момента вашей операции копирования.

Однако это просто предположение, поскольку я не знаком с этой темой.

Ответ 2

Вы можете заблокировать/разблокировать файлы и папки на Java, но только приложением, которое их заблокировало (вы запрограммировали). Однако нет Java-метода/класса, который может разблокировать файл, используемый другим процессом.

Вам необходимо связать приложение с другим (родным) программным обеспечением. Например, вы можете создать оболочку script для Linux-систем и выполнить ее. В приложении Java обнаруживает, в какой ОС он работает, поэтому вы можете выполнить правильное script/программное обеспечение.

Когда приложение требует блокировки RW, система должна гарантировать, что никто другой не имеет прав на его изменение, поэтому вам нужно убить процесс, который его использует.

Если у вас есть доступ к исходному коду этого стороннего приложения Java (который фактически является файлом блокировки, который вам нужен), тогда вы можете реализовать серверную сторону, которая будет прослушивать запросы на разблокировку файла и утверждение для блокировки это снова.

По моему мнению, лучший подход состоял бы в том, чтобы передать файл этим приложением на ваш, а затем делать то, что вы хотите, и стороннее приложение может работать без перерывов (не должно быть заметно). Если вам нужно его изменить, то 3-й должен подождать, изменить и отправить обновленную версию, третий продолжит работу.

Ответ 3

Я не вижу надежного инструмента для выполнения такой работы, но я должен сначала попытаться избежать блокировки, обнажая файл как службу через любой сервлет или какой-либо другой механизм. Сервлет читает файл один раз, а затем доставляет его содержимое в виде обычного текста (или потока)... Больше конфликтов блокировок

НТН Джером