【问题标题】:How can I watch subdirectory for changes with WatchService? (Java)如何使用 WatchService 监视子目录的更改? (爪哇)
【发布时间】:2011-04-09 22:04:04
【问题描述】:

我想查看一些目录的变化和她的子目录。我尝试使用WatchService 执行此操作,但我不知道文件是从哪个目录更改的。如何从WatchEvent 检索完整路径?

【问题讨论】:

标签: java watchservice


【解决方案1】:

通常你在启动 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);

【讨论】:

  • 请注意,WatchService 默认不会自动跟踪子目录和子目录的创建,因此您必须在开始时遍历目录路径并注册每个目录,以及捕获文件更改的类型, 并注册它(如果它是一个目录)。您可以在 WatchDir 示例中看到他们如何提供示例。
【解决方案2】:

对于使用 Spring 的用户

在 Spring 4.2 中引入了 WatchServiceDirectoryScanner。现在它还可以捕捉子目录的变化。

欲了解更多信息,Javadocs on WatchServiceDirectoryScanner

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    相关资源
    最近更新 更多