4

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

4

3 回答 3

4

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

如果你被 Java 6 困住了,你可以看看这篇文章其他文章中提出的一些替代方案。

于 2013-02-11T10:47:49.200 回答
2

你看过 Java 7 的File Notifier 服务吗?

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

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

于 2013-02-11T10:47:42.767 回答
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());
    }
}
于 2013-02-11T10:48:29.480 回答