我正在尝试开发一个监视服务,每次修改、创建或删除一段代码时,都会执行某个操作。
我已经制作了一个实现 WatchService 的守护程序,它可以获取某个包的路径来观看,例如“../JDV/src/randompackage/java/test/money_scenario”。
这个守护进程有以下代码:
public Daemon(Path dir) throws IOException{
this.dir = dir;
watcher = FileSystems.getDefault().newWatchService();
WatchKey key = dir.register(watcher, ENTRY_CREATE,ENTRY_DELETE,
ENTRY_MODIFY);
}
public void processEvents() throws InitializationError {
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();
if (kind == OVERFLOW) {
continue;
}
if(kind == ENTRY_CREATE) {
System.out.println("Creation has been detected in " + getDirName());
}
if(kind == ENTRY_DELETE) {
System.out.println("Deletion has been detected in " + getDirName());
}
if(kind == ENTRY_MODIFY) {
System.out.println("Modification has been detected in " + getDirName());
}
}
boolean valid = key.reset();
if (!valid) {
break;
}
}
}
发生的情况如下:我运行守护程序并且它处于活动状态。每当我在money_scenario 包中创建或删除一个类时(它本身有子包,我可以从中删除/创建该类),守护进程会检测到它并打印“已检测到修改”,而不是创建/删除。当我修改 money_scenario 包中的一个类时,它没有检测到任何东西。
我究竟做错了什么?
编辑:已解决,但出现了另一个问题。多个事件:例如,当我删除一个类时,我得到:
在 money_scenario 中检测到修改 在 money_scenario 中检测到删除 在 money_scenario 中检测到修改