要求是监视多个文件夹和文件以查找UNIX中的任何更改。我需要能够挂钩我的java代码以进行任何更改,例如create / modify / delete。任何人都可以建议任何基于Java的框架做同样的事情吗?
答案 0 :(得分:4)
如果您使用Java 7,则可以使用WatchService API来监控对文件系统的更改。
如果你坚持使用Java 6-,你可以查看this post或this other one中提出的一些备选方案。
答案 1 :(得分:2)
你看过Java 7的File Notifier service吗?
对于那些不能使用Java 7的人来说,java.nio.file包提供了文件更改通知API, 称为Watch Service API。此API允许您注册 带有监视服务的目录(或目录)。注册时, 您告诉服务您感兴趣的事件类型:file 创建,删除文件或修改文件。什么时候服务 检测到感兴趣的事件,将其转发给注册的 处理。已注册的进程有一个线程(或一个线程池) 致力于观看已注册的任何活动。当一个 事件进来,根据需要处理。
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());
}
}