由于某些原因我不能使用MessageDigest.getInstance("MD5")
,所以我必须以手动方式编写算法代码,我的项目是扫描重复文档(* .doc,* .txt,* .pdf)on Android设备。我的问题是,在输入算法之前我必须写什么,扫描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
}
答案 0 :(得分:0)
整个过程:
您的目标是检测(并可能存储有关重复文件的信息)。
1然后,首先,你必须遍历目录和文件,
看到这个:
list all files from directories and subdirectories in Java
2并且对于每个文件,像字节数组一样加载它
看到这个:
Reading a binary input stream into a single byte array in Java
3然后计算您的MD5 - 您的项目
4并存储此信息
您可以使用Set来检测重复项(Set具有唯一元素)。
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)实现......
总体策略
为了节省时间并加快处理速度,您还必须考虑使用您的功能:
如果您使用一次,对于一个独特的文件,最好通过在其他文件大小之前选择来减少工作量。
如果您经常使用它(并希望快速使用它),请定期扫描背景中的新文件以使哈希基础保持最新。检测新文件很简单。
如果您想要复制所有文件,请更好地扫描所有内容,并使用Set Strategy
希望这有帮助
答案 1 :(得分:0)
您想要recursively scan for files,然后,对于找到的每个文件,计算其MD5或其他任何内容,并在elements.each(function(index){
var itemId = $(this).attr('id').val();
});
中存储该哈希值,如果您只想知道如果文件是欺骗文件,或者如果您希望能够告诉当前文件与哪个文件重复,则在Set<...>
中。
对于每个文件的哈希,您将查看已知哈希的集合,以检查其中是否包含该特定哈希值;如果是,你(很可能)有一个重复的文件;如果不是,则将新的哈希值添加到集合中,然后继续下一个文件。