有人可以指导我如何使用一个监视服务注册多个文件夹路径吗?哪个更好(速度),一个 WatchService 用于多个文件夹?还是一个 WatchService 用于一个文件夹路径?多个文件夹最多可以有 12 个!
问问题
2789 次
1 回答
0
从 Java 教程(http://docs.oracle.com/javase/tutorial/essential/io/notification.html):
以下是实现监视服务所需的基本步骤:
- 为文件系统创建一个 WatchService“观察者”。
- 对于要监视的每个目录,将其注册到观察程序。注册目录时,您指定要通知的事件类型。您注册的每个目录都会收到一个 WatchKey 实例。
- 实现一个无限循环来等待传入事件。当一个事件发生时,该键被发送信号并被放入观察者的队列中。
- 从观察者的队列中检索密钥。您可以从密钥中获取文件名。
- 检索密钥的每个待处理事件(可能有多个事件)并根据需要进行处理。
- 重置密钥,并继续等待事件。
- 关闭服务:当线程退出或关闭(通过调用其关闭方法)时,监视服务退出。
如果有 12 个文件夹,我可能会为每个 WatchKey 创建一个线程。
WatchService watcher = FileSystems.getDefault().newWatchService();
// Repeat the following code to get a WatchKey for each folder
try {
Path dir = FileSystems.getDefault().getPath("logs", "access.log");
WatchKey key = dir.register(watcher,
ENTRY_CREATE,
ENTRY_DELETE,
ENTRY_MODIFY);
}
catch (IOException x) {
System.err.println(x);
}
于 2013-09-17T10:44:53.733 回答