【问题标题】:Monitor file/folders to get change notifications in UNIX在 UNIX 中监视文件/文件夹以获取更改通知
【发布时间】:2013-02-11 19:04:07
【问题描述】:

要求是监视多个文件夹和文件以了解 UNIX 中的任何更改。我需要能够为创建/修改/删除之类的任何更改挂钩我的 java 代码。有人可以建议任何基于 Java 的框架来做同样的事情吗?

【问题讨论】:

    标签: java unix file-monitoring


    【解决方案1】:

    如果您使用 Java 7,则可以使用 WatchService API 来监控文件系统的更改。

    如果您坚持使用 Java 6-,您可以查看 this postthis other one 中提出的一些替代方案。

    【讨论】:

    • 我们有一个限制,只能使用 java 6。您能否推荐任何与 java 6 兼容且开源的框架?
    • @Mithun 我添加了两个与 java 6 兼容库的链接。
    【解决方案2】:

    你看过 Java 7 的 File Notifier service 吗?

    java.nio.file 包提供了文件更改通知 API, 称为监视服务 API。此 API 使您可以注册一个 监视服务的目录(或目录)。注册时, 您告诉服务您对哪些类型的事件感兴趣:文件 创建、删除文件或修改文件。当服务 检测到感兴趣的事件,将其转发到已注册的 过程。注册的进程有一个线程(或线程池) 致力于观看它已注册的任何事件。当一个 事件进来,按需处理。

    JNotify 是一个类似的服务/库,适用于无法使用 Java 7 的用户。

    【讨论】:

      【解决方案3】:

      Java 7 引入了WatchService,它监视已注册对象的更改和事件。

      例子-

      Path myDir = Paths.get("D:/test");       
      
          try {
             WatchService watcher = myDir.getFileSystem().newWatchService();
             myDir.register(watcher, StandardWatchEventKind.ENTRY_CREATE, 
             StandardWatchEventKind.ENTRY_DELETE, StandardWatchEventKind.ENTRY_MODIFY);
      
             WatchKey watckKey = watcher.take();
      
             List<WatchEvent<?>> events = watckKey.pollEvents();
             for (WatchEvent event : events) {
                  if (event.kind() == StandardWatchEventKind.ENTRY_CREATE) {
                      System.out.println("Created: " + event.context().toString());
                  }
                  if (event.kind() == StandardWatchEventKind.ENTRY_DELETE) {
                      System.out.println("Delete: " + event.context().toString());
                  }
                  if (event.kind() == StandardWatchEventKind.ENTRY_MODIFY) {
                      System.out.println("Modify: " + event.context().toString());
                  }
              }
      
          } catch (Exception e) {
              System.out.println("Error: " + e.toString());
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-18
        • 1970-01-01
        • 2018-10-05
        • 1970-01-01
        • 2012-05-25
        • 2012-03-26
        • 1970-01-01
        • 2021-07-18
        相关资源
        最近更新 更多