【发布时间】:2013-02-11 19:04:07
【问题描述】:
要求是监视多个文件夹和文件以了解 UNIX 中的任何更改。我需要能够为创建/修改/删除之类的任何更改挂钩我的 java 代码。有人可以建议任何基于 Java 的框架来做同样的事情吗?
【问题讨论】:
标签: java unix file-monitoring
要求是监视多个文件夹和文件以了解 UNIX 中的任何更改。我需要能够为创建/修改/删除之类的任何更改挂钩我的 java 代码。有人可以建议任何基于 Java 的框架来做同样的事情吗?
【问题讨论】:
标签: java unix file-monitoring
如果您使用 Java 7,则可以使用 WatchService API 来监控文件系统的更改。
如果您坚持使用 Java 6-,您可以查看 this post 或 this other one 中提出的一些替代方案。
【讨论】:
你看过 Java 7 的 File Notifier service 吗?
java.nio.file 包提供了文件更改通知 API, 称为监视服务 API。此 API 使您可以注册一个 监视服务的目录(或目录)。注册时, 您告诉服务您对哪些类型的事件感兴趣:文件 创建、删除文件或修改文件。当服务 检测到感兴趣的事件,将其转发到已注册的 过程。注册的进程有一个线程(或线程池) 致力于观看它已注册的任何事件。当一个 事件进来,按需处理。
JNotify 是一个类似的服务/库,适用于无法使用 Java 7 的用户。
【讨论】:
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());
}
}
【讨论】: