Я использую FAM (FileAlterationMonitor) Apache JCI в сервисе Java OSGi для мониторинга и обработки изменений в файловой системе. Кажется, все работает довольно хорошо, за исключением того, что когда я запускаю Службу (которая запускает FAM с использованием приведенного ниже кода), FAM обнаруживает ВСЕ изменения, которые существуют в каталоге.
Сейчас смотрю / tmp
/ tmp включает поддерево: / tmp / foo / bar / cat / dog
Каждый раз, когда я запускаю службу и запускает FAM, она сообщает о событиях DirectoryCreate для:
/tmp/foo
/tmp/foo/bar
/tmp/foo/bar/cat
/tmp/foo/bar/cat/dog
Даже если никакие изменения не были внесены ни в одну часть этого поддерева.
Код запускаемый при активации услуги:
File watchFolder = new File("/tmp");
watchFolder.mkdirs();
fam = new FilesystemAlterationMonitor();
fam.setInterval(1000);
fam.addListener(watchFolder, listener);
fam.start();
// I've already tried adding:
listener.waitForFirstCheck();
Пример слушателя:
private FileChangeListener listener = new FileChangeListener() {
public void onDirectoryChange(File pDir) { System.out.println(pDir.getAbsolutePath()); }
public void onDirectoryCreate(File pDir) { System.out.println(pDir.getAbsolutePath()); }
...
}