查找电脑里重复的照片

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

原理比较简单粗暴,就是遍历所有的照片,计算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

posted @ 2018-11-10 22:27  编程柚子  阅读(1731)  评论(0编辑  收藏  举报