1. 程式人生 > >查詢電腦裡重複的照片

查詢電腦裡重複的照片

我的個人電腦裡最佔空間的就是電影和照片了,照片整理來整理去,存在不少重複的,就想著能不能寫段程式碼找到那些重複的照片。

原理比較簡單粗暴,就是遍歷所有的照片,計算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的方法就不適用了。

這樣的問題需要通過計算兩張照片的漢明距離來解決,後續補上程式碼~