我目前正在用Java实现我自己的WatchService API版本。
(您可以参考此example来了解WatchService所执行的文件。)
我已经为以下情况实现了代码:
我遇到了一个问题,每当文件被重命名时,我都不明白如何跟踪它。
此链接包含我的高级代码的要点:click here
每当文件被重命名时,我得到2个结果
删除文件:{old filename} 已添加文件:{new filename}
但我想要的实际结果是:
文件重新编号:从{旧文件名}到{新文件名}
我该如何应对这一挑战?
我提供了一个伪代码(我认为这足以理解手头的问题),如果需要我也可以提供整个代码:)
您可以为每个文件存储哈希值。当您检测到某些文件被删除并且一些文件被添加比较哈希时,如果它们匹配,则会找到重命名/移动的文件。
每当重命名文件时,观察者服务都会生成delete + create events。您应该将这两个事件合并为重命名事件。
您可以创建唯一ID并将其分配给文件。请参阅此link。每当你在文件上看到一个创建事件并且它已经有一些id时,就意味着它被重命名,否则它就是新创建。对于新创建的文件,您应设置随机唯一ID以跟踪重命名事件。
JNotify支持JNotify.FILE_RENAMED
事件。据我所知,这是本机inotify API的包装器,它可以捕获系统级别的文件重命名(更改名称而不更改文件描述符)。