我的個人電腦里最占空間的就是電影和照片了,照片整理來整理去,存在不少重復的,就想着能不能寫段代碼找到那些重復的照片。
原理比較簡單粗暴,就是遍歷所有的照片,計算MD5,MD5一樣的就是重復的~
用Java寫的,順便練習一下Java~
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
