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

2022-09-01 04:08:01

我使用的是 Java 7,以及 .注册后,当我轮询ENTRY_MODIFY事件时,我无法到达事件的文件的绝对路径。有没有办法从 WatchEvent 对象获取文件的绝对路径?java.nio.file.WatchEventWatchService


答案 1

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

WatchKey key;
WatchEvent<Path> event;

Path dir = (Path)key.watchable();
Path fullPath = dir.resolve(event.context());

这段代码读起来就像它需要随附的文档才能掌握,它本身就没有多大意义。他们对这个特定的API设计有什么意图?

而这仅仅是可能不直观用法的开始。Java的文件观察器API在主观上不如替代库。


答案 2

当然,您可能希望监视多个目录(例如,监视文件树的更改),存储已注册的目录并将其关联到一个中,这也是一个可行的解决方案。WatchKeyPathMap<WatchKey, Path>

当一个事件被触发时,可以要求与给定的相关联,然后更改的文件可以在与相关联的帮助下解决。MapPathWatchKeyPathPathWatchKey


推荐