【发布时间】:2019-02-15 06:09:03
【问题描述】:
我目前正在 Java 中实现我自己版本的 WatchService API。
(你可以参考这个example来了解WatchService文件是做什么的。)
我为以下情况实现了代码:
- 每当在目录或其子目录中创建文件时。
- 每当从目录或其子目录中删除文件时。
- 每当目录或其子目录中的文件被修改时。 (基于文件最后修改日期的比较)
我遇到了一个问题,每当文件被重命名时,我不知道如何跟踪它。
此链接包含我的代码的高级要点:click here
每当重命名文件时,我都会得到 2 个结果
文件已删除: {旧文件名}
已添加文件: {新文件名}
但我想要的实际结果是:
文件重命名: FROM {old filename} TO {new filename}
我该如何应对这个挑战?
我提供了一个伪代码(我认为这足以理解手头的问题),如果需要我也可以提供整个代码:)
【问题讨论】:
-
你如何存储这些文件?你有自己的 File 类实现吗?
-
@RafałSokalski 是的,我有自己的文件类,它存储各种数据,包括我的代码遍历文件时的创建日期和最后修改日期。
-
由于您的特定监视服务将在其自己的线程中运行,我认为您需要维护文件索引。每当触发事件时,都需要将索引进行比较。如果存在相同数量的文件但一个名称不同但它包含相同的时间戳和一个不再存在的名称的校验和,则该文件被重命名。
-
因此您可以存储您的实际文件名,如果您想更改它,然后在您自己的 File 类中使用旧名称更新变量,那么如果您的 if 语句返回该文件已更改,您可以简单地获取此名称
标签: java file detection file-rename