Обнаружение открытия файла в Java - PullRequest
3 голосов
/ 26 сентября 2008

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

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

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

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

Ответы [ 3 ]

1 голос
/ 26 сентября 2008

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

1 голос
/ 26 сентября 2008

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

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

0 голосов
/ 26 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...