【问题标题】:java.nio.file.WatchEvent gives me only relative path. How can I get the absolute path of the modified file?java.nio.file.WatchEvent 只给我相对路径。如何获取修改后文件的绝对路径?
【发布时间】:2011-10-18 02:02:46
【问题描述】:

我正在使用 Java 7,java.nio.file.WatchEventWatchService。注册后,当我轮询 ENTRY_MODIFY 事件时,我无法获取事件文件的绝对路径。有没有办法从 WatchEvent 对象获取文件的绝对路径?

【问题讨论】:

    标签: java filesystemwatcher


    【解决方案1】:

    需要从WatchKey中获取父目录来解析完整路径

    WatchKey key;
    WatchEvent<Path> event;
    
    Path dir = (Path)key.watchable();
    Path fullPath = dir.resolve(event.context());
    

    这段代码读起来好像需要附带的文档才能掌握,它本身没有什么意义。他们对这种特定 API 设计的意图是什么?

    这只是可能不直观的用法的开始。 Java 的文件观察器 API 在主观上不如其他库。

    【讨论】:

    • 你应该投反对票。但人们最终会自己发现。你需要数百行额外的代码来达到你一开始想要的:知道哪些文件被改变了。仍然没有办法以绝对正确的方式实现这一目标。 nio 团队出现了严重问题。
    • 你误会了。您的回答很好,值得一票,我对 java.nio.file 的优点没有很好的意见,但是您回答的最后两个词并不公平。事实比滥用更重要。
    • 如何处理多个被监视的目录?我正在查看一个目录及其所有子目录,不知道修改/创建的文件在哪个子目录中。
    • Apache Commons IO 有一个更简单的目录观察器。就像不可名誉一样,我对 Java 的实现摸不着头脑。
    【解决方案2】:

    当然,您需要查看多个目录(例如,监控文件树的更改),存储已注册的 WatchKey 并将其关联到 Map&lt;WatchKey, Path&gt; 中的 Path 也是一个可行的解决方案。

    当一个事件被触发时,Map 可以被要求与给定的WatchKey 关联的Path,然后可以在Path 的帮助下解决更改文件的Path @ 987654329@是关联的。

    【讨论】:

      【解决方案3】:

      取决于你有什么对象,你可以得到它的绝对路径:

      Path.toAbsolutePath()

      File.getAbsoluteFile()

      【讨论】:

        【解决方案4】:

        String fullPath = path.toString() + "\\"+ event.context().toString();

        :D

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-09-21
          • 2021-08-15
          • 1970-01-01
          • 1970-01-01
          • 2022-06-10
          • 1970-01-01
          • 2021-10-18
          相关资源
          最近更新 更多