繁体   English   中英

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

[英]Monitor file/folders to get change notifications in UNIX

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

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

如果你坚持使用Java 6-,你可以看看这篇文章另一篇 文章中提出的一些替代方案。

您是否查看过Java 7的File Notifier服务

java.nio.file包提供了一个名为Watch Service API的文件更改通知API。 此API使您可以使用监视服务注册目录(或多个目录)。 注册时,您告诉服务您感兴趣的事件类型:文件创建,文件删除或文件修改。 当服务检测到感兴趣的事件时,它将被转发到注册的进程。 已注册的进程有一个线程(或一个线程池),专门用于监视它已注册的任何事件。 当一个事件进入时,它会根据需要进行处理。

对于那些不能使用Java 7的人来说, JNotify是一个类似的服务/库。

Java 7引入了WatchService ,它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());
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM