我正在寻找一种简单的方法来检测两次重新启动之间目录中的文件是否已更改,以避免不必要的同步。在Java 8库中执行此操作的最简单方法是什么?我应该对每个文件的md5摘要进行异或还是对每个文件的校验和进行异或?
我们不需要处理进入子目录的ATM。
此外,我们不应使用OS事件来检测此更改,因为将仅在启动时调用检测方法。目录中文件的数量可以在应用程序的不同版本之间改变,但是这些文件通常在重新启动之间不会改变。
这看起来像一个相关的帖子:https://crypto.stackexchange.com/questions/1368/is-it-a-good-idea-to-use-bitwise-xor-on-a-set-of-md5-sums
文件时间戳可能会被重置(例如,由“ root”用户执行,从而使文件似乎没有更改。
在不实际更改文件的情况下更改“已修改”的文件时间戳很简单;例如touch
。
您还需要知道文件的[[previous校验和是什么。这意味着您需要一种存储方式。那可能只是另一个文件,但是作为同步过程的一部分,您需要一些基础结构来(可靠地)更新该文件。
异或多个校验和会导致您不知道哪些文件已更改的问题。如果一个文件更改,则需要同步所有文件。
在某些情况下
另一件事是,我怀疑您正在尝试解决已解决的问题。例如,Linux / Unix “我们无权访问旧文件树”rsync
实用程序具有使用时间戳或(MD5)校验和来决定需要同步哪些文件的选项。您不需要自己实现所有功能(使用Java)。
为回应您的
复制文件树将当前文件与您重新引导的副本[[上次
进行比较。DirectoryDigest dd = new DirectoryDigest();
dd.update(csConfigDirPath, ".xml");
String currentPeripheralHash = dd.digest();