игнорировать изменение файла с помощью Jnotify - PullRequest
0 голосов
/ 21 марта 2011

Я использую Jnotify , чтобы написать приложение.(JNotify - это библиотека для обнаружения изменения файла.)

Приложение имеет следующие компоненты:

  1. Средство записи файла, которое записывает в файл X

  2. Средство просмотра файлов (созданное с помощью JNotify), которое просматривает файл X

  3. Внешнее приложение (например, блокнот), которое записывает данные в файл X в соответствии с требованиями пользователя.

Я хочу, чтобы JNotify запускал уведомления только при изменении X с использованием 3, и игнорировал при изменении с помощью 1. (или хотя бы различал модификации с помощью 1 и 3).

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

Ответы [ 2 ]

1 голос
/ 21 марта 2011

В любом случае вам нужно некоторое общение между 1 + 2, чтобы временно отключить 2 (а для 3 у вас нет возможности сделать это).Конечно, если 1 + 2 работает в одной и той же JVM, более подходящим способом является разделение некоторого состояния в общей переменной.

Вы можете подумать о других разумных способах связи.Мне пришло в голову: перед тем, как 1 начнет писать, он сгенерирует файл блокировки, на котором также находится 2.Когда файл блокировки удаляется с 1 после завершения записи, 2 может продолжить прослушивание файла после уведомления об удалении файла блокировки.

0 голосов
/ 22 марта 2011

Я пробовал два разных способа (описано ниже, вместе с выбранным вариантом)

  • Вариант 1: использовать общую логическую переменную (то есть блокировку), которая переключается в true на 1. Когда эта переменная равна true, 3 не записывает, а вместо этого устанавливает ее в false).

  • Вариант 2: использовать общий хэш SHA1 файла. Writer (1) обновляет хэш каждый раз, когда записывает файл. Затем watcher (2) проверяет хеш измененного файла и игнорирует, совпадает ли хеш с общим хешем.

Я решил использовать Вариант 2, так как он работал отлично. Использовать опцию 1 сложно, поскольку для каждого измененного файла JNotify запускает два обновления (странно).

...