java如何检测文件是否已重命名?
我目前正在Java中实现自己版本的WatchService API
(您可以参考此example以了解文件WatchService的作用。)
我已为以下情况实施了代码:
- 每当在目录或其子目录中创建文件时李>
- 每当从目录或其子目录中删除文件时李>
- 每当目录或其子目录中的文件被修改时(基于文件最后修改日期的比较)
- 每当从目录或其子目录中删除文件时李>
我面临一个问题,每当文件被重命名时,我都不知道如何跟踪它
此链接包含我的高级代码的要点:click here
每当重命名一个文件时,我都会得到两个结果
FILE DELETED : {old filename}
FILE ADDED : {new filename}
但我希望实际结果是:
FILE RENAMED: FROM {old filename} TO {new filename}
我如何应对这一挑战
我已经提供了一个psuedo代码(我认为这足以理解手头的问题),如果需要,我也可以提供整个代码:)
# 1 楼答案
JNotify支持
JNotify.FILE_RENAMED
事件。据我所知,这是本机inotify API上的包装器,它可以捕获系统级别的文件重命名(更改名称而不更改文件描述符)# 2 楼答案
每当重命名文件时,watcher服务都会生成删除+创建事件。您应该了解如何将这两个事件合并为重命名事件
您可以创建一个唯一的id并将其分配给文件。请参阅此link。每当您在文件上看到创建事件并且它已经有一些id时,这意味着它被重命名,否则它是新创建的。对于新创建的文件,应设置随机唯一id以跟踪重命名事件
# 3 楼答案
可以为每个文件存储哈希。 当您检测到一些文件被删除,一些文件被添加时,比较哈希值,如果它们匹配,您会发现重命名/移动的文件