一、依赖
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);
}
}