gpt4 book ai didi

java - 监视 Java 文件的更改

转载 作者:行者123 更新时间:2023-11-30 04:10:26 26 4
gpt4 key购买 nike

我正在尝试开发一项监视服务,每次修改、创建或删除一段代码时,该服务都会执行特定操作。

我制作了一个实现 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;
}
}
}

发生的情况如下:我运行守护程序并且它处于 Activity 状态。每当我在 Money_scenario 包中创建或删除一个类(它本身有子包,我可以从中删除/创建该类)时,守护进程会检测到它并打印“已检测到修改”,而不是创建/删除。当我修改 Money_scenario 包中的类时,它没有检测到任何内容。

我做错了什么?

编辑:已解决,但又出现了另一个问题。多个事件:例如,当我删除一个类时,我得到:

在 Money_scenario 中检测到修改在 Money_scenario 中检测到删除在 Money_scenario 中检测到修改

最佳答案

我真的不知道该告诉你什么,因为我拿走了你的代码,它在我的机器上运行良好。

enter image description here

删除的唯一东西是抛出InitializationError,尽管我怀疑它与此有关。

配置:Mac OS X 10.9/Java 1.7.0_45/Intellij IDEA 12.1.6

附注

which itselves has subpackages from where I could delete/create the class

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com