我正在尝试开发一种监视服务,每次修改,创建或删除一段代码时,它都会执行特定的操作。
我制作了一个实现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中检测到修改
最佳答案
我真的不确定在这一点上要告诉你什么,因为我拿了你的代码,并且在我的机器上运行良好。
我删除的唯一内容是throws InitializationError
,尽管我怀疑它是否与它有关。
配置:Mac OS X 10.9 / Java 1.7.0_45 / Intellij IDEA 12.1.6
附言
哪个elselves有子包,可以从中删除/创建类
WatchService仅监视您指向的目录,如果要监视子目录,则需要递归遍历并在子树中注册每个目录。
编辑:
public void processEvents() {
boolean finished = false;
while (!finished) {
// 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();
switch (kind.name()) {
case "ENTRY_CREATE":
System.out.println("Creation has been detected in " + getDirName());
break;
case "ENTRY_DELETE":
System.out.println("Deletion has been detected in " + getDirName());
break;
case "ENTRY_MODIFY":
System.out.println("Modification has been detected in " + getDirName());
break;
default:
continue;
}
if (!key.reset()) {
finished = true;
}
}
}
}
关于java - 注意文件Java的更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19740900/