A.T.Field

查找电脑里重复的照片

Word count: 346Reading time: 1 min
2018/11/10

我的个人电脑里最占空间的就是电影和照片了,照片整理来整理去,存在不少重复的,就想着能不能写段代码找到那些重复的照片。

原理比较简单粗暴,就是遍历所有的照片,计算MD5,MD5一样的就是重复的~

用Java写的,顺便练习一下Java~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;

public class Main {
private static String PHOTO_PATH = "D:\\照片";
private static String[] extensions = {"jpg"};
private static HashMap<String, File> hashMap = new HashMap<>();

public static void main(String[] args) throws IOException {
Collection files = FileUtils.listFiles(
new File(PHOTO_PATH), extensions, true);
for (File file : files) {
FileInputStream fis = new FileInputStream(file);
String md5 = DigestUtils.md5Hex(fis);
checkSame(md5, file);
fis.close();
}

System.out.println("Job done!");
}

private static void checkSame(String md5, File file) {
if (hashMap.containsKey(md5)) {
System.out.println(String.format("%-150s",
hashMap.get(md5).getAbsolutePath())
+ " -- " + file.getAbsolutePath());
} else {
hashMap.put(md5, file);
}
}
}

有些照片太大了,我会用FSResizer(神器,推荐一下)调整分辨率,让文件变小一点。调整前后的两张照片其实是一样的,但是计算MD5的方法就不适用了。

这样的问题需要通过计算两张照片的汉明距离来解决,代码较多,就不贴在博客里了,请移步我的GitHub

CATALOG