猿问

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

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

(你可以参考这个例子 来了解文件WatchService的作用。)

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

  • 每当在目录或其子目录中创建文件时。

  • 每当从目录或其子目录中删除文件时。

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

我面临一个问题,每当重命名文件时,我不明白如何跟踪它。

此链接包含我的代码的高级要点:单击此处

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

文件删除: {旧文件名}
文件添加: {新文件名}

但我想要的实际结果是:

文件重命名:{旧文件名}{新文件名}

我该如何应对这个挑战?

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


牧羊人nacy
浏览 268回答 3
3回答

慕森王

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

慕侠2389804

每当重命名文件时,观察者服务都会生成删除 + 创建事件。您应该了解如何将这两个事件合并为重命名事件。您可以创建一个唯一 ID 并将其分配给文件。请参阅此链接。每当您在文件上看到创建事件并且它已经有一些 id 时,这意味着它被重命名,否则它是新创建的。对于新创建的文件,您应该设置随机唯一 ID 以跟踪重命名事件。

MYYA

您可以为每个文件存储哈希。当您检测到某些文件被删除并添加了一些比较哈希值时,如果它们匹配,您会发现重命名/移动的文件。
随时随地看视频慕课网APP

相关分类

Java
我要回答