Обнаружение повторного открытия файла в Java

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

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

Мне нужно, чтобы мое приложение Java обнаружило, что файл был повторно открыт, и перезапустил его после файла.

Как мне лучше всего это сделать?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
765
3

Ответы 3

Вы можете указать место в файловой системе, которое указывает, что вы читаете данный файл. Предположим, что рядом с читаемым файлом (a.txt) вы создаете рядом с ним файл (a.txt.lock), который указывает на то, что a.txt читается. Когда ваш процесс завершится, файл a.txt.lock будет удален. Каждый раз, когда процесс открывает файл для его чтения, он заранее проверяет наличие файла блокировки. Если файла блокировки нет, он не используется. Надеюсь, это имеет смысл и отвечает на ваш вопрос. ваше здоровье!

ps, это обычно используется программами, чтобы определить, запущен ли другой экземпляр или нет

Jurassic_C 26.09.2008 11:07

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

использование файла блокировки - это решение, о котором упоминал Юрский период.

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

Другие вопросы по теме