今天下载了好多美女图片壁纸,可是看了一下发现好多图片重复了,有强迫症的我必须把重复的都给剔除掉,首先想到的当然是百度了,问问度娘有没有什么图片去重的工具,搜了一下还真有。奈何本人智商捉急用不来这高级的软件,无奈之下只好准备一张一张的挑出来了,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排除重复文件的更多相关文章

  1. linux 通过md5查找重复文件

    代码如下: md5sum *|sort |uniq -w32 -D|awk -F ' ' '{print $2}' uniq 部分参数 -c #在每行前显示该行重复次数. -d #只输出重复的行. - ...

  2. Linux查找并删除重复文件的命令行fdupes工具,dupeGuru图形工具

    查了几十个网页,找到这个接近满意的解决方案http://unix.stackexchange.com/questions/146197/fdupes-delete-files-aft... 不过正则里 ...

  3. 如何用Python寻找重复文件并删除

    在实际生活中,经常会有文件重复的困扰,即同一个文件可能既在A目录中,又在B目录中,更可恶的是,即便是同一个文件,文件名可能还不一样.在文件较少的情况下,该类情况还比较容易处理,最不济就是one by ...

  4. [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 ...

  5. 检测某一目录下md5相同的文件

    import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.io.IOUtils; import jav ...

  6. Duplicate Manager Pro for Mac(重复文件查找工具)破解版安装

    1.软件简介    Duplicate Manager Pro 是 macOS 系统上一款重复文件查找工具,可以帮你在 Mac 电脑上查找出磁盘上面的重复文件,然后让你对这些重复文件进行判断并删除,使 ...

  7. Linux系统中查找、删除重复文件,释放磁盘空间。

    在Linux系操作系统中查找并删除重复文件的方法的确有很多,不过这里介绍的是一款非常简单实用的软件FSlint.FSlint是一个重复文件查找工具,可以使用它来清除不必要的重复文件,笔者经常使用它来释 ...

  8. 文件处理工具 gif合成工具 文件后缀批量添加工具 文件夹搜索工具 重复文件查找工具 网页图片解析下载工具等

    以下都是一些简单的免费分享的工具,技术支持群:592132877,提供定制化服务开发. Gif动图合成工具 主要功能是扫描指定的文件夹里的所有zip文件,然后提取Zip文件中的图片,并合成一张gif图 ...

  9. python 删除重复文件 附源代码

    啥也不说了,直接上源码 #! /usr/bin/env python #coding=utf-8 import os import md5 import time def getmd5( filena ...

随机推荐

  1. ASP.NET中的Image和ImageButton控件

    Image 控件用来显示图形.Image 控件可以显示来自位图.图标或元文件的图形,也可以显示增强的元文件.JPEG 或 GIF文件. ImageButton 控件用于显示可点击的图像. Image ...

  2. 文件上传插件uploadify详解

    官网:http://www.uploadify.com/ 基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同时上传,上传进行进度显示,删除已上传文件. 要求使用jquery1.4或以上 ...

  3. ubuntu 中增加鼠标右键菜单,为Windows 的exe 程序快速增加桌面快捷键

    #!/bin/bashmyfile=$NAUTILUS_SCRIPT_SELECTED_FILE_PATHSmyfilename=${myfile##*/}myfilename=${myfilenam ...

  4. UCenter整合登陆时出现’Authorization has expired’错误(2014-03-13记)

    原因之可能是两台机子的时间不一致导致.

  5. Centos6.7安装docker1.7.1

    Docker当前发布的最新版本已经到了1.11,其官网上针对Centos的的安装需求如下: Docker requires a -bit installation regardless of your ...

  6. #添加图片,最多只能上传9张.md

    #添加图片,最多只能上传9张.md 前端页面: ```javascript <form id="imgForm" enctype="multipart/form-d ...

  7. 相似性度量(Similarity Measurement)与“距离”(Distance)

    在做分类时常常需要估算不同样本之间的相似性度量(Similarity Measurement),这时通常采用的方法就是计算样本间的“距离”(Distance).采用什么样的方法计算距离是很讲究,甚至关 ...

  8. KVM虚拟机virsh常用参数

    线上虚拟机挂了,常用的命令忘了,记录下 链接:http://www.ibm.com/support/knowledgecenter/zh/linuxonibm/liabp/liabpcommonvir ...

  9. javascript弹层组件

    组件名称:layui 网址:http://layer.layui.com/ 里面有一个选择日期的组件,在导航的独立组件里,可以用来选择时间.

  10. IntelliJ IDEA使用(1)——IDEA配置JDK

    提前安装jdk,配置环境变量 一.配置jdk 1.依次点开File -->Project Structure,点击左侧标签页,点击SDKs 2.点击+号,选SDK 3.在弹出框选择jdk路径(我 ...