代码之家  ›  专栏  ›  技术社区  ›  Jared

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

  •  7
  • Jared  · 技术社区  · 15 年前

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

    我知道 windows supports file system events ,并且这个项目已经被其他需求约束到Windows平台。

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

    一个快速的谷歌出现了 this library . 有没有人愿意分享的经验?

    6 回复  |  直到 12 年前
        1
  •  7
  •   Bill the Lizard    12 年前

    我认为这是Java 7的一个关键特性,当它更可用时。Sun的示例代码 blog on Java 7:

    导入静态Java.NiO.Field.Stand AdvestEvestOrth.*;

    Path dir = ...;
    try {
        WatchKey key = dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
    } catch (IOException x) {
        System.err.println(x);
    }
    
        2
  •  2
  •   dB.    14 年前

    对于Java 6或更旧的使用 JNA 的com.sun.jna.platform.win32.filemonitor。

        3
  •  1
  •   Draemon    15 年前

    一些相当低级别和操作系统特定的东西(如您提到的链接)将需要本机代码。该库看起来相对较小,所以在最坏的情况下,如果C++足够好,您可能会解决任何问题。

    如果你能完全避免,我建议你不要使用本机代码库。对于您的场景有什么要求,以至于您不能进行后台线程投票?

        4
  •  1
  •   Community pid    7 年前

    布赖恩·阿格纽的建议很好: Is there a sophisticated file system monitor for Java which is freeware or open source?

    描述来自 http://jnotify.sourceforge.net/ :

    JNebug是允许Java应用程序侦听文件系统事件的Java库,例如:

    • 创建文件
    • 文件修改
    • 文件更名
    • 文件已删除
        5
  •  1
  •   Ritesh    13 年前

    您可以使用OpenSourceJPollar框架以时间间隔轮询目录。 它还允许基于时间的轮询。

        6
  •  0
  •   John Doe    15 年前

    如果不使用JDK7,就必须使用JNI。