由于某些原因我不能使用MessageDigest.getInstance("MD5"),所以我必须手动编写算法代码,我的项目是在安卓设备上扫描重复文档(*.doc,*.txt,*.pdf)。我的问题是,在输入算法之前,我必须写些什么来扫描Android设备根目录上重复的文档?如果没有选择目录,当我按下按钮扫描时,进程就开始了,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
}发布于 2015-12-17 11:53:14
整个过程:
您的目标是检测(或者存储有关)重复文件的信息。
首先,你必须遍历目录和文件,
见此:
list all files from directories and subdirectories in Java
对于每个文件,加载它就像一个字节数组。
见此:
Reading a binary input stream into a single byte array in Java
3然后计算你的MD5 -你的项目
4并存储这些信息。
您可以使用集合来检测重复项(集合具有唯一的元素)。
Set<String> files_hash; // each String is a string representation of MD5
if (files_hash.contains(my_md5)) // you know you have it already或者是一个
Map<String,String> 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)实现..。
总体战略
为了保持时间并使进程更快,您还必须考虑使用您的功能:
希望这能有所帮助
发布于 2015-12-17 14:45:53
然后,您将希望对找到的每个文件进行recursively scan for files,计算其MD5或其他什么,并将该哈希值存储在Set<...>中,如果您只想知道某个文件是否为dupe,或者如果您希望能够判断当前文件是哪个文件的副本,则将其存储在Map<..., File>中。
对于每个文件的散列,您将查看已知散列的集合,以检查其中是否包含特定的散列值;如果是,则(很可能)有一个重复的文件;如果不是,则将新的散列值添加到集合中,然后继续处理下一个文件。
https://stackoverflow.com/questions/34333653
复制相似问题