java.nio.file.WatchEvent只给我相对路径.如何获取修改文件的绝对路径?

use*_*258 31 java filesystemwatcher

我正在使用Java 7,java.nio.file.WatchEvent以及WatchService.注册后,当我轮询ENTRY_MODIFY事件时,我无法访问该事件的文件的绝对路径.有没有办法从WatchEvent对象到达文件的绝对路径?

irr*_*ble 99

您需要从WatchKey获取父目录以解析完整路径

WatchKey key;
WatchEvent<Path> event;

Path dir = (Path)key.watchable();
Path fullPath = dir.resolve(event.context());
Run Code Online (Sandbox Code Playgroud)

这段代码读起来就像它需要随附的文档一样,它本身没什么意义.他们对这种特殊API设计的意图是什么?

这只是可能不直观的使用的开始.Java的文件监视器API在主观上不如替代库.

  • 那么你应该投票.但人们最终会自己发现它.你需要数百行额外的代码才能在开始时达到你想要的:知道哪些文件被改变了.仍然没有办法以绝对正确的方式实现这一目标.nio团队有严重的严重错误. (7认同)
  • 你误会了.你的答案是好的,值得一个upvote,我对java.nio.file的优点没有很好的看法,但你的答案的最后两个字不公平.事实不仅仅是滥用. (5认同)
  • 如果它不适合那些神奇的东西,我会赞成这一点. (3认同)
  • Apache Commons IO有一个更简单的目录观察器.就像无可争议的那样,我正在抓住Java的实现. (2认同)