查找電腦里重復的照片


我的個人電腦里最占空間的就是電影和照片了,照片整理來整理去,存在不少重復的,就想着能不能寫段代碼找到那些重復的照片。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM