我正在尝试开发一种监视服务,每次修改,创建或删除一段代码时,都会执行某种操作。监视文件更改Java
我制作了一个守护程序,它实现了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
由于原来如此! 现在我又遇到了另外一个问题,即多个事件被捕获。 请参阅编辑中的说明。 – Sven
@Sven无法重新创建该错误,但您可以尝试编辑,我认为它应该不太容易出错。可能if会多次触发,因为创建/删除操作可能触发修改事件(取决于操作系统)。 – maryokhin