首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java奇怪的WatchService

java奇怪的WatchService
EN

Stack Overflow用户
提问于 2015-12-02 21:13:14
回答 1查看 59关注 0票数 0

我的操作系统是Windows7。

我创建的目录是这样的

代码语言:javascript
复制
WatchService watchService = FileSystems.getDefault().newWatchService();
Path rootPath = Paths.createDirectory(Paths.get("c:/foo"));
rootPath.register(watchService, ENTRY_MODIFY, ENTRY_CREATE);

Path depth1Child = Paths.createDirectory(Paths.get("c:/foo/depth1"));

WatchKey key = null;

//printed : ENTRY_CREATE c:/foo/depth1
while((key=watchService.poll()) != null) {
    for (WatchEvent e : key.pollEvents())
        System.out.println(e.kind()+" "+e.context());
    key.reset();
}

depth1Child.register(watchService, ENTRY_MODIFY, ENTRY_CREATE);
Path depth2Child = Paths.createDirectory(Paths.get("c:/foo/depth1/depth2"));

//printed : ENTRY_MODIFY c:/foo/depth1, ENTRY_CREATE c:/foo/depth1/depth2
while((key=watchService.poll()) != null) {
    for (WatchEvent e : key.pollEvents())
        System.out.println(e.kind()+" "+e.context());
    key.reset();
}

为什么在第一次深度目录创建和第二次路径创建后发生不同的事件?

我在ENTRY_MODIFY和ENTRY_CREATE中注册了c:/foo path,c:/foo/depth1、c:/foo/depth2也是如此。

谢谢你的帮忙

EN

回答 1

Stack Overflow用户

发布于 2015-12-25 06:12:52

由于为ENTRY_MODIFY和ENTRY_CREATE事件注册了"c:/foo“,因此当您创建"c:/foo/depth1”时,您将获得ENTRY_CREATE事件。因为为“c:/foo/depth1”注册了ENTRY_MODIFY和ENTRY_CREATE事件,所以当您创建"c:/foo/depth1/depth2“时,您已经修改了"c:/foo/depth1",所以您得到:

适用于"c:/foo/depth1"

  • ENTRY_CREATE的
  • ENTRY_MODIFY,用于"c:/foo/depth1/depth2“

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34043661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档