如何使用WatchService(Java)监视子目录的更改?

9

我想监视某个目录及其子目录的变化。我尝试使用WatchService,但是我无法知道文件是从哪个目录更改的。如何从WatchEvent中检索完整路径?


限制:https://dev59.com/c2oy5IYBdhLWcg3wieu6 - Joop Eggen
2个回答

2
通常在启动watchservice时提供文件的目录名称。下面是演示如何操作的教程: http://blogs.oracle.com/thejavatutorials/entry/watching_a_directory_for_changes 以下为教程内容:
   Path dir = ...;
   try {
       WatchKey key = dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
   }[.....]

当您接收到通知时:

   //The filename is the context of the event.
   WatchEvent<Path> ev = (WatchEvent<Path>)event;
   Path filename = ev.context();

   Path child = dir.resolve(filename);

1
请注意,WatchService默认不会自动跟踪子目录和子目录的创建,因此您需要在开始时遍历目录路径并注册每个目录,以及捕获文件更改类型,并将其注册(如果是目录)。您可以在WatchDir示例中看到它们的示例。 - Nick Klauer

1

对于使用Spring的用户:

在Spring 4.2中引入了WatchServiceDirectoryScanner。现在它也可以捕获子目录的更改。

有关更多信息,请参见WatchServiceDirectoryScanner的Javadocs


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接