我需要知道新文件何时出现在目录中。显然,我可以定期轮询文件系统,但这具有轮询机制的所有正常缺点。
我知道windows supports file system events,此项目已被其他要求限制在Windows平台上。
有没有人有经验在JVM中接收Windows文件系统事件?如果是这样,您使用过的最佳实践,模式和/或库是什么?
快速谷歌出现this library。有没有人有他们愿意分享的经验(或任何其他)?
答案 0 :(得分:7)
我认为这是Java 7更具可用性的关键特性之一。来自Sun的blog on Java 7:
的示例代码import static java.nio.file.StandardWatchEventKind。*;
Path dir = ...;
try {
WatchKey key = dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
} catch (IOException x) {
System.err.println(x);
}
答案 1 :(得分:2)
对于Java 6或更早版本,请使用JNA的com.sun.jna.platform.win32.FileMonitor。
答案 2 :(得分:1)
某种程度相当低且特定于操作系统的东西需要本机代码(根据您提到的链接)。该库看起来相对较小,因此在最坏的情况下,如果您的C ++足够好,您可以解决任何问题。
如果你可以完全避免它,我建议你不要使用本机代码 - 库。你的场景有什么要求,你不能进行后台线程调查?
答案 3 :(得分:1)
Brian Agnew对JNotify的推荐是一个很好的建议: Is there a sophisticated file system monitor for Java which is freeware or open source?
来自http://jnotify.sourceforge.net/的说明:
JNotify是一个java库,允许java应用程序监听文件系统事件,例如:
- 已创建文件
- 文件已修改
- 文件已重命名
- 文件已删除
答案 4 :(得分:1)
您可以使用opensource JPollar框架按时间间隔轮询目录。 它还允许基于时间的轮询。
答案 5 :(得分:0)
如果不使用Jdk7,则必须使用JNI。