如何在Java中接收Windows文件系统事件?

时间:2009-07-21 18:49:43

标签: java windows filesystems

我需要知道新文件何时出现在目录中。显然,我可以定期轮询文件系统,但这具有轮询机制的所有正常缺点。

我知道windows supports file system events,此项目已被其他要求限制在Windows平台上。

有没有人有经验在JVM中接收Windows文件系统事件?如果是这样,您使用过的最佳实践,模式和/或库是什么?

快速谷歌出现this library。有没有人有他们愿意分享的经验(或任何其他)?

6 个答案:

答案 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。