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

问题描述 投票:1回答:3

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

(您可以参考此example来了解WatchService所执行的文件。)

我已经为以下情况实现了代码:

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

我遇到了一个问题,每当文件被重命名时,我都不明白如何跟踪它。

此链接包含我的高级代码的要点:click here

每当文件被重命名时,我得到2个结果

删除文件:{old filename} 已添加文件:{new filename}

但我想要的实际结果是:

文件重新编号:从{旧文件名}到{新文件名}

我该如何应对这一挑战?

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

java file detection file-rename
3个回答
0
投票

您可以为每个文件存储哈希值。当您检测到某些文件被删除并且一些文件被添加比较哈希时,如果它们匹配,则会找到重命名/移动的文件。


0
投票

每当重命名文件时,观察者服务都会生成delete + create events。您应该将这两个事件合并为重命名事件。

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.