【发布时间】:2011-10-18 02:02:46
【问题描述】:
我正在使用 Java 7,java.nio.file.WatchEvent 和 WatchService。注册后,当我轮询 ENTRY_MODIFY 事件时,我无法获取事件文件的绝对路径。有没有办法从 WatchEvent 对象获取文件的绝对路径?
【问题讨论】:
我正在使用 Java 7,java.nio.file.WatchEvent 和 WatchService。注册后,当我轮询 ENTRY_MODIFY 事件时,我无法获取事件文件的绝对路径。有没有办法从 WatchEvent 对象获取文件的绝对路径?
【问题讨论】:
需要从WatchKey中获取父目录来解析完整路径
WatchKey key;
WatchEvent<Path> event;
Path dir = (Path)key.watchable();
Path fullPath = dir.resolve(event.context());
这段代码读起来好像需要附带的文档才能掌握,它本身没有什么意义。他们对这种特定 API 设计的意图是什么?
这只是可能不直观的用法的开始。 Java 的文件观察器 API 在主观上不如其他库。
【讨论】:
当然,您需要查看多个目录(例如,监控文件树的更改),存储已注册的 WatchKey 并将其关联到 Map<WatchKey, Path> 中的 Path 也是一个可行的解决方案。
当一个事件被触发时,Map 可以被要求与给定的WatchKey 关联的Path,然后可以在Path 的帮助下解决更改文件的Path @ 987654329@是关联的。
【讨论】:
取决于你有什么对象,你可以得到它的绝对路径:
Path.toAbsolutePath()
File.getAbsoluteFile()
【讨论】:
String fullPath = path.toString() + "\\"+ event.context().toString();
:D
【讨论】: