事件触发 java_java – 当观看目录时事件触发一次

使用

java.nio观看服务,我尝试观看目录及其所有子目录:

Files.walkFileTree(projectPath, new SimpleFileVisitor() {

@Override

public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {

WatchKey key = dir.register(watcher, StandardWatchEventKinds.ENTRY_CREATE,

StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_DELETE);

watched.put(key, new WatchableDirectory(dir, projectPath));

return FileVisitResult.CONTINUE;

}

});

然后我等待事件:

executor.submit(new Runnable() {

@Override

public void run() {

try {

WatchKey key;

while ((key = watcher.take()) != null) {

List> events = key.pollEvents();

WatchableDirectory watchableDirectory = watched.get(key);

for (WatchEvent> event : events) {

....

}

}

....

}

}

(观看的是一个地图,保存从关键字到目录的元数据的映射)

但是,只有给定目录的第一个事件被触发.每当我在目录中更改另一个文件时,文件已经被更改,没有任何反应(我通过放置一个断点并期待在for-loop中的逻辑发生)来验证.

但是,如果我修改另一个目录中的文件,那么一切正常(再次,只有第一次).

抛出异常(java.lang.Exception有一个catch子句),并且循环显然继续运行.

我以为可能一旦消费,目录可能会被注销.所以我在文件被处理之后添加了一行来重新注册它.没有效果.

Windows 7,Java 7.

任何想法为什么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值