首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用md5扫描重复文档

用md5扫描重复文档
EN

Stack Overflow用户
提问于 2015-12-17 11:37:58
回答 2查看 1.1K关注 0票数 1

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

代码语言:javascript
复制
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
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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并存储这些信息。

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

代码语言:javascript
复制
Set<String> files_hash; // each String is a string representation of MD5
if (files_hash.contains(my_md5)) // you know you have it already

或者是一个

代码语言:javascript
复制
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策略

希望这能有所帮助

票数 0
EN

Stack Overflow用户

发布于 2015-12-17 14:45:53

然后,您将希望对找到的每个文件进行recursively scan for files,计算其MD5或其他什么,并将该哈希值存储在Set<...>中,如果您只想知道某个文件是否为dupe,或者如果您希望能够判断当前文件是哪个文件的副本,则将其存储在Map<..., File>中。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34333653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档