查詢電腦裡重複的照片
阿新 • • 發佈:2018-11-10
我的個人電腦裡最佔空間的就是電影和照片了,照片整理來整理去,存在不少重複的,就想著能不能寫段程式碼找到那些重複的照片。
原理比較簡單粗暴,就是遍歷所有的照片,計算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); } } }
有些照片太大了,我會調整解析度,讓檔案變小一點。調整前後的兩張照片其實是一樣的,但是計算MD5的方法就不適用了。
這樣的問題需要通過計算兩張照片的漢明距離來解決,後續補上程式碼~