这是我使用监视器更改文件夹的代码:
WatchService watcher = FileSystems.getDefault().newWatchService();
Path dir = Paths.get("/home/user/test/");
dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
System.out.println("Begin monitor to test folder: ");
for (;;) {
// wait for key to be signaled
WatchKey key;
try {
key = watcher.take();
} catch (InterruptedException x) {
return;
}
for (WatchEvent<?> event: key.pollEvents()) {
WatchEvent.Kind<?> kind = event.kind();
// The filename is the
// context of the event.
@SuppressWarnings("unchecked")
WatchEvent<Path> ev = (WatchEvent<Path>)event;
Path filename = ev.context();
if (filename.toString().startsWith(".")) continue;
if (kind == OVERFLOW) {
continue;
} else if (kind == ENTRY_CREATE) {
System.out.println(kind.name() + ":" +filename);
} else if (kind == ENTRY_DELETE) {
System.out.println(kind.name() + ":" +filename);
} else if (kind == ENTRY_MODIFY) {
System.out.println(kind.name() + ":" +filename);
}
}
boolean valid = key.reset();
if (!valid) {
break;
}
}
在Windown,Mac OS上很棒,但是在Ubuntu 16.04上运行时,我面临问题:对于Watched文件夹中存在的文件:当我编辑文件时,我想获得Modify Event
时,我的接收器创建事件请帮助我
谢谢。
确保您使用的程序在Ubuntu中编辑文件不会创建隐藏的文件。一些编辑这样做是为了确保程序崩溃时不会丢失任何更改。
因此,请确保您的编辑器在编辑文件时不会创建隐藏的文件,并且如果它确实使用另一个程序或处理隐藏的"子文件"。