我在 Java OSGi 服务中使用 Apache JCI 的 FAM (FileAlterationMonitor) 来监视和处理文件系统中的更改。一切似乎都运行良好,除了每当我启动服务(它使用下面的代码启动 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()); }
...
}