通过MD5排除重复文件
今天下载了好多美女图片壁纸,可是看了一下发现好多图片重复了,有强迫症的我必须把重复的都给剔除掉,首先想到的当然是百度了,问问度娘有没有什么图片去重的工具,搜了一下还真有。奈何本人智商捉急用不来这高级的软件,无奈之下只好准备一张一张的挑出来了,CTRL+A一看2000+的图片,好吧一晚上不用干别的事了。。
辛亏脑袋还比较好使,既然作为一个程序员,为什么不能写个代码处理一下呢?想到点子说干咱就干,最重要的问题就是怎么判断图片是不是重复的呢?通过文件名?还是比较大小?好像都不怎么靠谱啊。。突然又是灵光一闪,每个文件不都是有个DNA信息嘛,相同的文件MD5值肯定是一样的嘛。
废话说了这么多,下面说正经的了,首先要怎么获得文件的MD5值呢?这回度娘倒没让我失望了,直接上代码:
String p = "E:\\123.jpg";
FileInputStream fis = new FileInputStream(p);
String md5 = DigestUtils.md5Hex(IOUtils.toByteArray(fis));
IOUtils.closeQuietly(fis);
System.out.println("md5: "+md5);
得到所有文件的md5之后进行比较,相同的md5就是重复的文件了。md5已经得到了剩下的就很简单了,通过File取到所有的文件,然后再获取文件的MD5,再写个双重for循环排除掉相同的md5,写完收工搞定。运行起来就等结果了,这一等就是两个小时。。好在结果倒是挺不错。但是这个时间有点让人接受不了啊,这个代码还是有问题啊,得优化。又一想,集合去重复这不可以用Set嘛,赶紧把代码稍作改造,分分钟搞定。。差距也恁大了,看来这java基础还是不够牢固啊。又要从头看一遍书了。。附上最终代码:
String path = "E:\\123";
File dir = new File(path);
String[] files = dir.list();
Map<String,String> map=new HashMap<String,String>();
for (int i = 0; i < files.length; i++)
{
String p = path + "\\" + files[i];
FileInputStream fis = new FileInputStream(p);
String md5 = DigestUtils.md5Hex(IOUtils.toByteArray(fis));
IOUtils.closeQuietly(fis);
map.put(md5,files[i]);
}
Iterator<String> it = map.keySet().iterator();
while (it.hasNext())
{
String md5=it.next();
String filename=map.get(md5);
System.out.println("不重复的文件:"+filename);
}
各位看官们要是有什么更好的方法可以给我提出来啊。最后还是不管遇到什么问题还是要先仔细的分析研究一下,不要急着动手敲代码,思路清晰了敲出来的代码才会更有效。
明天再准备做一个简单的客户端程序,这样以后就不用每次来运行代码了。回头会把源代码附上。
通过MD5排除重复文件的更多相关文章
- linux 通过md5查找重复文件
代码如下: md5sum *|sort |uniq -w32 -D|awk -F ' ' '{print $2}' uniq 部分参数 -c #在每行前显示该行重复次数. -d #只输出重复的行. - ...
- Linux查找并删除重复文件的命令行fdupes工具,dupeGuru图形工具
查了几十个网页,找到这个接近满意的解决方案http://unix.stackexchange.com/questions/146197/fdupes-delete-files-aft... 不过正则里 ...
- 如何用Python寻找重复文件并删除
在实际生活中,经常会有文件重复的困扰,即同一个文件可能既在A目录中,又在B目录中,更可恶的是,即便是同一个文件,文件名可能还不一样.在文件较少的情况下,该类情况还比较容易处理,最不济就是one by ...
- [Swift]LeetCode609. 在系统中查找重复文件 | Find Duplicate File in System
Given a list of directory info including directory path, and all the files with contents in this dir ...
- 检测某一目录下md5相同的文件
import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.io.IOUtils; import jav ...
- Duplicate Manager Pro for Mac(重复文件查找工具)破解版安装
1.软件简介 Duplicate Manager Pro 是 macOS 系统上一款重复文件查找工具,可以帮你在 Mac 电脑上查找出磁盘上面的重复文件,然后让你对这些重复文件进行判断并删除,使 ...
- Linux系统中查找、删除重复文件,释放磁盘空间。
在Linux系操作系统中查找并删除重复文件的方法的确有很多,不过这里介绍的是一款非常简单实用的软件FSlint.FSlint是一个重复文件查找工具,可以使用它来清除不必要的重复文件,笔者经常使用它来释 ...
- 文件处理工具 gif合成工具 文件后缀批量添加工具 文件夹搜索工具 重复文件查找工具 网页图片解析下载工具等
以下都是一些简单的免费分享的工具,技术支持群:592132877,提供定制化服务开发. Gif动图合成工具 主要功能是扫描指定的文件夹里的所有zip文件,然后提取Zip文件中的图片,并合成一张gif图 ...
- python 删除重复文件 附源代码
啥也不说了,直接上源码 #! /usr/bin/env python #coding=utf-8 import os import md5 import time def getmd5( filena ...
随机推荐
- python学习笔记系列----(二)控制流
实际开始看这一章节的时候,觉得都不想看了,因为每种语言都会有控制流,感觉好像我不看就会了似的.快速预览的时候,发现了原来还包含了对函数定义的一些描述,重点讲了3种函数形参的定义方法,章节的最后讲述了P ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数003·contour,轮廓处理
<zw版·Halcon-delphi系列原创教程> Halcon分类函数003·contour,轮廓处理 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替 ...
- cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element ‘dubbo:application’. – schema_reference.4: Failed to read schema document
解决办法: 1.直接百度下载一个dubbo.xsd文件 2.myeclispe-->window-->preferences-->xml catalog-->add 完美解决!
- 使用匿名函数在回调函数中正确访问JS循环变量
有时候, 需要以不同的参数调用某个URL,并且在回调函数中仍然可以访问正在使用的参数, 这时候, 需要使用闭包保存当前参数, 否则, 当回调函数执行时, 之前的参数很可能早已被修改为最后一个参数了. ...
- How to locate a path? - Unix & Linux Stack Exchange
How to locate a path? - Unix & Linux Stack Exchange http://unix.stackexchange.com/questions/2955 ...
- sublime设置备份
Settings-user { "font_face": "Consolas", "font_size": 13, "line_p ...
- 上传图片预览设置src不显示
使用滤镜效果解决: window.parent.document.body.focus(); var imgurl = (document.selection.createRange().text). ...
- Asp.net 头像的简单实现
1:创建数据库 Create Table ImageSave ( ID ,), Name ), img image ) 2:上传照片页关键代码 前台: <div> <asp:File ...
- [问题2014S06] 复旦高等代数II(13级)每周一题(第六教学周)
[问题2014S06] 试用有理标准型理论证明13级高等代数I期末考试最后一题: 设 \(V\) 为数域 \(K\) 上的 \(n\) 维线性空间, \(\varphi\) 为 \(V\) 上的线 ...
- EasyUI关于 numberbox,combobox,validatebox 的几个小问题
在最近的项目中,首次使用到了 网页的一个布局框架——EasyUI,感觉这个框架特别牛,兼容性很不错,页面效果也挺不错,可是在使用标题上三个控件过程中遇到几个很奇特的问题,让我头疼不已,所以在此给广大I ...