监视文件/文件夹以在UNIX中获取更改通知

时间:2013-02-11 10:46:32

标签: java unix file-monitoring

要求是监视多个文件夹和文件以查找UNIX中的任何更改。我需要能够挂钩我的java代码以进行任何更改,例如create / modify / delete。任何人都可以建议任何基于Java的框架做同样的事情吗?

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

你看过Java 7的File Notifier service吗?

  

java.nio.file包提供了文件更改通知API,   称为Watch Service API。此API允许您注册   带有监视服务的目录(或目录)。注册时,   您告诉服务您感兴趣的事件类型:file   创建,删除文件或修改文件。什么时候服务   检测到感兴趣的事件,将其转发给注册的   处理。已注册的进程有一个线程(或一个线程池)   致力于观看已注册的任何活动。当一个   事件进来,根据需要处理。

对于那些不能使用Java 7的人来说,

JNotify是一个类似的服务/库。

答案 2 :(得分:1)

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());
    }
}