使用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>
如果您希望能够告诉当前文件与哪个文件重复。
对于每个文件的哈希,您将查看已知哈希的集合,以检查其中是否包含特定哈希值; 如果是,你(很可能)有一个重复的文件; 如果不是,则将新哈希值添加到集合中并继续下一个文件。
- Android ReactNative java.lang.UnsatisfiedLinkError:可以找到要加载的DSO:libreactnativejni.so
- 使用适配器中的不同数据更新不同ListView中的常用post
- TextView中部分左对齐和部分右对齐的文本。 为什么这不起作用?
- Android是否具有相当于JPanel的function?
- 在Android中运行unit testing时,Intent解析为不同的进程
- 无论屏幕方向如何,如何获得正确的方位(磁方向)?
- 退出时如何保存活动的状态? Android的
- 在Android应用程序中接收MMS
- 滚动ExpendableListView后计数器的值发生变化