如何检测文件是否已重命名?

时间:2019-02-15 06:09:04

标签: java file detection file-rename

我目前正在 Java 中实现我自己的WatchService API版本

(您可以参考此example来了解 WatchService 的功能。)

在以下情况下,我具有已实现的代码

  • 只要在目录或其子目录中创建了文件
  • 每当从目录或其子目录中删除文件时,
  • 只要在目录或其子目录中的文件已修改(基于文件的最后修改日期的比较)

我面临一个问题,无论何时重命名文件,我都不知道如何跟踪它。

此链接包含我的代码摘要:click here

文件重命名后,我会得到2条结果

  

文件已删除: {旧文件名}
  添加文件: {新文件名}

但是我想要的实际结果是:

  

重命名文件:从 {旧文件名} {新文件名}

我该如何应对这一挑战?

我提供了一个伪代码(我认为足以理解当前的问题),如果需要,我也可以提供完整的代码:)

3 个答案:

答案 0 :(得分:0)

您可以存储每个文件的哈希。 当您检测到某些文件被删除,某些添加的比较哈希值以及它们是否匹配时,您会发现已重命名/移动的文件。

答案 1 :(得分:0)

无论何时重命名文件,监视程序服务都会生成删除+创建事件。您应该了解如何将这两个事件合并为重命名事件。

您可以创建一个唯一的ID,并将其分配给文件。请参阅此link。每当您在文件上看到一个create事件并且它已经有一些ID时,即表示它已被重命名,否则它是新创建的。对于新创建的文件,您应该设置随机唯一ID以跟踪重命名事件。

答案 2 :(得分:0)

JNotify支持JNotify.FILE_RENAMED事件。据我了解,这是对本机inotify API的包装,它可以在系统级别捕获文件重命名(更改名称而不更改文件描述符)。