使用md5扫描重复文档

由于某些原因,我不能使用MessageDigest.getInstance("MD5") ,所以我必须手动编写算法代码,我的项目是在Android设备上扫描重复文档(* .doc,* .txt,* .pdf) 。 我的问题是,在输入算法之前我必须写什么,扫描Android设备上MY ROOT目录上的重复文档? 如果没有选择目录,当我按下按钮扫描时,进程开始, listview显示。 有人可以帮帮我吗? 我的项目截止日期即将到来。 非常感谢。

 public class MD5 { //What must I write here, so I allow to scan for duplicate document on Android root with MD5 Hash //MD5 MANUAL ALGORITHM CODE } 

整个过程:

您的目标是检测(并可能存储有关重复文件的信息)。

1然后,首先,您必须遍历目录和文件,

看到这个:

列出Java中目录和子目录的所有文件

2,对于每个文件,像字节数组一样加载它

看到这个:

在Java中将二进制输入流读入单个字节数组

3然后计算您的MD5 – 您的项目

4并存储此信息

您可以使用Set来检测重复项(Set具有唯一元素)。

 Set files_hash; // each String is a string representation of MD5 if (files_hash.contains(my_md5)) // you know you have it already 

或者a

 Map file_and_hash; // each is file => hash // you have to iterate to know if you have it already, or keep also a Set 

MD5的答案:

读取算法: https : //en.wikipedia.org/wiki/MD5

RFC: https : //www.ietf.org/rfc/rfc1321.txt

一些谷歌搜索……

本演讲,一步一步http://infohost.nmt.edu/~sfs/Students/HarleyKozushko/Presentations/MD5.pdf

或尝试复制C(或java)实现…

总体战略

为了节省时间并加快处理速度,您还必须考虑使用您的函数:

  • 如果你使用它一次,对于一个独特的文件,最好通过在其他文件大小之前选择来减少工作量。

  • 如果你经常使用它(并希望快速使用它),请定期扫描背景中的新文件以使哈希基础保持最新。 检测新文件很简单。

  • 如果您想要复制所有文件,请更好地扫描所有内容,并使用Set Strategy

希望这可以帮助

您将要递归扫描文件 ,然后,对于找到的每个文件,计算其MD5或其他任何内容并存储该哈希值,如果您只想知道文件是否为欺骗, Set<...> ,或者在Map<..., File>如果您希望能够告诉当前文件与哪个文件重复。

对于每个文件的哈希,您将查看已知哈希的集合,以检查其中是否包含特定哈希值; 如果是,你(很可能)有一个重复的文件; 如果不是,则将新哈希值添加到集合中并继续下一个文件。