Файловая система монитора Java, когда Java не работает - PullRequest
1 голос
/ 13 октября 2011

Я недавно внедрил JavaS WatchService, и он отлично работает. Теперь мне стало интересно, есть ли способ получить все события, которые произошли с момента последнего запуска моей программы. Например:

  1. Я запускаю свою программу, создаю несколько файлов, редактирую некоторые файлы и получаю все соответствующие события
  2. Я закрываю свою программу
  3. Я создаю файл с именем foo.txt
  4. Я запускаю свою программу, и первое событие, которое я получаю, это ENTRY_CREATE для foo.txt

Я думал о сохранении lastModifiedDate и поиске файлов и каталогов, более новых, чем последнее выполнение моей программы. Есть ли другой (и лучший) способ сделать это?

Ответы [ 3 ]

2 голосов
/ 13 октября 2011

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

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

1 голос
/ 13 октября 2011

Нет способа сделать это на Java или на любом другом языке программирования.

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

0 голосов
/ 13 октября 2011

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

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

...