博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java计算文件MD5值(支持大文件)
阅读量:5111 次
发布时间:2019-06-13

本文共 3523 字,大约阅读时间需要 11 分钟。

import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.security.MessageDigest; import org.apache.commons.codec.binary.Hex;import org.apache.commons.codec.digest.DigestUtils; /** *MD5计算工具 */public class Md5CaculateUtil {     /**     * 获取一个文件的md5值(可处理大文件)     * @return md5 value     */    public static String getMD5(File file) {        FileInputStream fileInputStream = null;        try {            MessageDigest MD5 = MessageDigest.getInstance("MD5");            fileInputStream = new FileInputStream(file);            byte[] buffer = new byte[8192];            int length;            while ((length = fileInputStream.read(buffer)) != -1) {                MD5.update(buffer, 0, length);            }            return new String(Hex.encodeHex(MD5.digest()));        } catch (Exception e) {            e.printStackTrace();            return null;        } finally {            try {                if (fileInputStream != null){                    fileInputStream.close();                    }            } catch (IOException e) {                e.printStackTrace();            }        }    }     /**     * 求一个字符串的md5值     * @param target 字符串     * @return md5 value     */    public static String MD5(String target) {        return DigestUtils.md5Hex(target);    }     public static void main(String[] args) {        long beginTime = System.currentTimeMillis();        File file = new File("D:/1/pdi-ce-7.0.0.0-24.zip");        String md5 = getMD5(file);        long endTime = System.currentTimeMillis();        System.out.println("MD5:" + md5 + "\n 耗时:" + ((endTime - beginTime) / 1000) + "s");    }}

 修改的一个utils方法:

package hanwl.FileDemo;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.nio.file.Files;import java.nio.file.StandardOpenOption;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class CalcMD5 {        private static final char[] hexCode = "0123456789ABCDEF".toCharArray();    public static void main(String[] args) {        long beginTime = System.currentTimeMillis();        File file = new File("E:/云舒测试文件/20180628-北大社-中国古文字学通论.pdf");        //File file = new File("E:/拉鲁斯法汉双解词典(12新)/制作文件库/其他/SJ00040936 拉鲁斯法汉双解词典(内文排版).zip");        String md5 = calcMD5(file);        long endTime = System.currentTimeMillis();        System.out.println("MD5:" + md5 + "\n 耗时:" + ((endTime - beginTime) / 1000) + "s");    }    /**     * 计算文件 MD5     * @param file     * @return 返回文件的md5字符串,如果计算过程中任务的状态变为取消或暂停,返回null, 如果有其他异常,返回空字符串     */    protected static String calcMD5(File file) {        try (InputStream stream = Files.newInputStream(file.toPath(), StandardOpenOption.READ)) {            MessageDigest digest = MessageDigest.getInstance("MD5");            byte[] buf = new byte[8192];            int len;            while ((len = stream.read(buf)) > 0) {                digest.update(buf, 0, len);            }            return toHexString(digest.digest());        } catch (IOException e) {            e.printStackTrace();            return "";        } catch (NoSuchAlgorithmException e) {            e.printStackTrace();            return "";        }    }        public static String toHexString(byte[] data) {          StringBuilder r = new StringBuilder(data.length * 2);          for (byte b : data) {              r.append(hexCode[(b >> 4) & 0xF]);              r.append(hexCode[(b & 0xF)]);          }          return r.toString();      }}

 

转载于:https://www.cnblogs.com/loong-hon/p/10237075.html

你可能感兴趣的文章
Data truncation: Out of range value for column 'Quality' at row 1
查看>>
Dirichlet分布深入理解
查看>>
(转)Android之发送短信的两种方式
查看>>
字符串处理
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
ad logon hour
查看>>
获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName...
查看>>
证件照(1寸2寸)拍摄处理知识汇总
查看>>
罗马数字与阿拉伯数字转换
查看>>
Eclipse 反编译之 JadClipse
查看>>
Python入门-函数
查看>>
[HDU5727]Necklace(二分图最大匹配,枚举)
查看>>
距离公式汇总以及Python实现
查看>>
设计模式之装饰者模式
查看>>
一道不知道哪里来的容斥题
查看>>
Blender Python UV 学习
查看>>
window添加右键菜单
查看>>
入手腾龙SP AF90mm MACRO
查看>>
Window7上搭建symfony开发环境(PEAR)
查看>>
Linux内核态、用户态简介与IntelCPU特权级别--Ring0-3
查看>>