我有2个文件夹,每个文件夹我使用相同的WatchService注册了一个WatchKey ... 当我在一个文件夹中更改某些内容时,显然会有一个WatchEvent。 但是当我有一个事件时,我想在另一个文件夹中更改某些内容,而不会为另一个文件夹获取另一个事件。因为这会导致无限循环:(
我这样的代码无法正常运行:
while (true) {
try {
key = watcher.take();
keypath = (Path) key.watchable();
list = key.pollEvents();
for (WatchEvent<?> e : list) {
if (e.kind() == OVERFLOW) {
System.err.println("OVERFLOW!");
break;
} else {
file = new File(keypath.toString() + "\\" + e.context().toString());
System.out.println("FileChange detected: \"" + file + "\" [" + e.kind() + "]");
WatchKey other = getKey(getOtherFile(file));
other.cancel();
new Thread(new WatcherSync(this, file, sync)).start();
registerWatchKey((Path)other.watchable());
}
}
if (!key.reset()) {
System.err.println("Reset failed for WatchKey: " + keypath);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}