有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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代码(我认为这足以理解手头的问题),如果需要,我也可以提供整个代码:)


共 (3) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    每当重命名文件时,watcher服务都会生成删除+创建事件。您应该了解如何将这两个事件合并为重命名事件

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

  3. # 3 楼答案

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