我目前正在 Java 中实现我自己的WatchService API版本。
(您可以参考此example来了解 WatchService 的功能。)
在以下情况下,我具有已实现的代码:
我面临一个问题,无论何时重命名文件,我都不知道如何跟踪它。
此链接包含我的代码摘要:click here
文件重命名后,我会得到2条结果
文件已删除: {旧文件名}
添加文件: {新文件名}
但是我想要的实际结果是:
重命名文件:从 {旧文件名} 到 {新文件名}
我该如何应对这一挑战?
我提供了一个伪代码(我认为足以理解当前的问题),如果需要,我也可以提供完整的代码:)
答案 0 :(得分:0)
您可以存储每个文件的哈希。 当您检测到某些文件被删除,某些添加的比较哈希值以及它们是否匹配时,您会发现已重命名/移动的文件。
答案 1 :(得分:0)
无论何时重命名文件,监视程序服务都会生成删除+创建事件。您应该了解如何将这两个事件合并为重命名事件。
您可以创建一个唯一的ID,并将其分配给文件。请参阅此link。每当您在文件上看到一个create事件并且它已经有一些ID时,即表示它已被重命名,否则它是新创建的。对于新创建的文件,您应该设置随机唯一ID以跟踪重命名事件。
答案 2 :(得分:0)
JNotify支持JNotify.FILE_RENAMED事件。据我了解,这是对本机inotify API的包装,它可以在系统级别捕获文件重命名(更改名称而不更改文件描述符)。