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

java.nio.file.WatchEvent只提供相对路径。如何获取修改文件的绝对路径?,java,filesystemwatcher,Java,Filesystemwatcher,我正在使用Java7,Java.nio.file.WatchEvent以及WatchService。注册后,当我轮询ENTRY_MODIFY事件时,我无法获取事件文件的绝对路径。有没有办法从WatchEvent对象获取文件的绝对路径?根据您获得的对象,您可以获取其绝对路径: Path.toabsolutionPath() File.getAbsoluteFile()您需要从WatchKey获取父目录以解析完整路径 WatchKey key; WatchEvent<Path> even

我正在使用Java7,
Java.nio.file.WatchEvent
以及
WatchService
。注册后,当我轮询ENTRY_MODIFY事件时,我无法获取事件文件的绝对路径。有没有办法从WatchEvent对象获取文件的绝对路径?

根据您获得的对象,您可以获取其绝对路径:

Path.toabsolutionPath()


File.getAbsoluteFile()

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

WatchKey key;
WatchEvent<Path> event;

Path dir = (Path)key.watchable();
Path fullPath = dir.resolve(event.context());
WatchKey;
观察事件;
Path dir=(Path)key.watchable();
Path fullPath=dir.resolve(event.context());
这段代码读起来像是需要附带的文档才能理解,它本身没有什么意义。他们对这种特殊的API设计有何意图


这仅仅是非直观用法的开始。Java的file watcher API主观上不如其他库

String fullPath=path.toString()+“\\”+event.context().toString()


:D

如果您希望监视多个目录(例如,监视文件树的更改),将注册的
监视键
及其关联的
路径
存储在
映射中也将是一个可行的解决方案


当触发事件时,可以要求
映射
与给定的
监视键
关联的
路径
,然后在
路径
的帮助下解析更改文件的
路径
监视键
与之关联。

您应该进行否决投票。但是人们最终会自己发现的。您需要数百行额外的代码才能达到一开始想要的效果:了解更改了哪些文件。但仍然没有绝对正确的方法来实现这一点。nio团队有严重问题,你误解了。你的答案很好,值得投票表决,我对java.nio.file的优点没有什么好的看法,但你的答案的最后两个字并不公正。事实比滥用更重要。你如何处理多个被监视的目录?我正在监视一个目录及其所有子目录,不知道修改/创建的文件在哪个子目录中。就像不可改变的一样,我对Java的实现摸不着头脑。