获取文件 MD5 校验值

Java常用方法   2025-01-12 00:51   138   0  

一、依赖

commons-codec-1.15.jar

二、示例代码

package com.chenwc;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import org.apache.commons.codec.digest.DigestUtils;

public class FileMd5 {

    public static void main(String[] args) {

        File file = new File("D:\\Downloads\\IMG_20230805_000155.jpg");
        System.out.println("文件:" + file.getAbsolutePath() + " 的 MD5 校验值为:" + getFileMd5ByCodec(file));
        System.out.println("文件:" + file.getAbsolutePath() + " 的 MD5 校验值为:" + getFileMd5ByMessageDigest(file));
    }

    /**
     * 使用commons-codec生成文件md5校验值
     * 
     * @param file 文件
     * @return md5 校验值
     */
    public static String getFileMd5ByCodec(File file) {
        String md5 = "";
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(file);
            md5 = DigestUtils.md5Hex(fis);
        } catch (IOException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        } finally {
            try {
                if (null != fis) {
                    fis.close();
                }
            } catch (Exception e2) {
                // TODO: handle exception
                e2.printStackTrace();
            }
        }
        return md5;
    }

    /**
     * 使用jdk自带的MessageDigest生成文件md5校验值
     * 
     * @param file 文件
     * @return md5 校验值
     */
    public static String getFileMd5ByMessageDigest(File file) {
        BigInteger bi = null;
        FileInputStream fis = null;
        try {
            byte[] buffer = new byte[8192];
            int len = 0;
            MessageDigest md = MessageDigest.getInstance("MD5");
            fis = new FileInputStream(file);
            while ((len = fis.read(buffer)) != -1) {
                md.update(buffer, 0, len);
            }
            byte[] b = md.digest();
            bi = new BigInteger(1, b);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != fis) {
                    fis.close();
                }
            } catch (Exception e2) {
                // TODO: handle exception
                e2.printStackTrace();
            }
        }
        return bi.toString(16);
    }
}


博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。