这里使用了lombok打印日志,也可以不用

  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.security.MessageDigest;
  6. import java.security.NoSuchAlgorithmException;
  7. import lombok.extern.slf4j.Slf4j;
  8. /**
  9. * author yvioo
  10. */
  11. @Slf4j
  12. public class MD5Util {
  13. /**
  14. * 生成文件的md5校验值

  15. * @param path 文件路径
  16. * @return 文件md5校验值
  17. * @throws IOException
  18. * @throws NoSuchAlgorithmException
  19. */
  20. public static String getFileMD5String(String path){
  21. InputStream fis = null;
  22. MessageDigest messagedigest = null;
  23. try {
  24. messagedigest = MessageDigest.getInstance("md5");
  25. File file = new File(path);
  26. if(!file.exists() || !file.isFile()) {
  27. log.error("不存在或不是一个文件");
  28. return "";
  29. }
  30.  
  31. fis = new FileInputStream(file);
  32. byte[] buffer = new byte[1024];
  33. int numRead = 0;
  34. while ((numRead = fis.read(buffer)) > 0) {
  35. messagedigest.update(buffer, 0, numRead);
  36. }
  37. }catch (IOException e) {
  38. e.printStackTrace();
  39. }catch (NoSuchAlgorithmException e){
  40. e.printStackTrace();
  41. }finally {
  42. try {
  43. if(fis != null) {
  44. fis.close();
  45. }
  46. } catch (IOException e) {
  47. e.printStackTrace();
  48. }
  49. }
  50. return bufferToHex(messagedigest.digest());
  51. }
  52. private static String bufferToHex(byte bytes[]) {
  53. return bufferToHex(bytes, 0, bytes.length);
  54. }
  55. private static String bufferToHex(byte bytes[], int m, int n) {
  56. StringBuffer stringbuffer = new StringBuffer(2 * n);
  57. int k = m + n;
  58. for (int l = m; l < k; l++) {
  59. appendHexPair(bytes[l], stringbuffer);
  60. }
  61. return stringbuffer.toString();
  62. }
  63. /**
  64.  * 默认的密码字符串组合,用来将字节转换成 16 进制表示的字符,apache校验下载的文件的正确性用的就是默认的这个组合
  65.  */
  66. protected static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
  67. private static void appendHexPair(byte bt, StringBuffer stringbuffer) {
  68. char c0 = hexDigits[(bt & 0xf0) >> 4];// 取字节中高 4 位的数字转换, >>> 为逻辑右移,将符号位一起右移,此处未发现两种符号有何不同 
  69. char c1 = hexDigits[bt & 0xf];// 取字节中低 4 位的数字转换 
  70. stringbuffer.append(c0);
  71. stringbuffer.append(c1);
  72. }
  73. }

JAVA生成文件的md5校验值的更多相关文章

  1. Java 读取网络资源文件 获取文件大小 MD5校验值

    Java 读取网络资源文件 获取文件大小 MD5校验值 封装一个文件操作工具类: package c; import java.io.*; import java.net.HttpURLConnect ...

  2. 生成文件的MD5值

    import hashlib #########测试################# m = hashlib.md5() m.update(b"hello") m.update( ...

  3. Shell 对整个文件夹中的文件进行MD5校验 [转]

    查看本地文件的 MD5 命令:md5sum FileName查看home目录下所有文件的 MD5 码:cd ~find /home -type f -print0 | xargs -0 md5sum ...

  4. 生成文件的MD5、SHA、SHA256

    生成文件的MD5.SHA.SHA256 Linux系统生成MD5.SHA.SHA256md5sum file1.zip  >> MD5.txt sha1sum file1.zip > ...

  5. Unity3d通用工具类之生成文件的MD5

    今天我们来写写工具类,这个类有什么用呢? 也就是无论你做什么项目,这个工具类你都可以拿来用,之所以通用,是可以适用所有项目. 这节我主要讲如何生成文件的MD5码. 那么这个MD5是个什么鬼东西,读者可 ...

  6. MD5介绍及Windows下对文件做md5校验。

    MD5介绍参考百度百科: 摘要如下: MD5 校验和(checksum)通过对接收的传输数据执行散列运算来检查数据的正确性. 一个散列函数,比如 MD5,是一个将任意长度的数据字符串转化成短的固定长度 ...

  7. Java生成文件

    Java生成文件 1.说明 以文件路径作为參数,推断该文件是否存在,若不存在就创建文件.并输出文件路径 2.实现源代码 /** * @Title:BuildFile.java * @Package:c ...

  8. Java生成文件夹

    Java生成文件夹 1.说明 判断文件夹是否存在,如果不存在就创建该文件夹,并打印其路径:如果存在,打印其路径 2.实现源码 /** * @Title:BuildFolder.java * @Pack ...

  9. JAVA 获取文件的MD5值大小以及常见的工具类

    /** * 获取文件的MD5值大小 * * @param file * 文件对象 * @return */ public static String getMD5(File file) { FileI ...

随机推荐

  1. 洛谷 P5470 - [NOI2019] 序列(反悔贪心)

    洛谷题面传送门 好几天没写题解了,写篇题解意思一下(大雾 考虑反悔贪心,首先我们考虑取出 \(a,b\) 序列中最大的 \(k\) 个数,但这样并不一定满足交集 \(\ge L\) 的限制,因此我们需 ...

  2. python15正则表达式

    ------------恢复内容开始------------ python实现实现实现实现 import re #将表达式编译,返回一个对象, pattern = re.compile(r" ...

  3. 给lua_close实现回调函数

    先讲下为什么会需要lua_close回调吧. 我用C++给lua写过不少库,其中有一些,是C++依赖堆内存,并且是每一个lua对象使用一块单独的内存来使用的. 在之前,我一直都是魔改lua源代码,给l ...

  4. 选择省份、选择省市区举例【c#】【js】

    <style type="text/css"> .labelhide { -webkit-box-shadow: 0px 1px 0px 0px #f3f3f3 !im ...

  5. C#最大值

    dtToSList = sqlAccess.ExecuteTable(CommandText); ToSNo = Convert.ToString(dtToSList.Rows[i].ItemArra ...

  6. 《Scala编程》课程作业

    第一题.百元喝酒 作业要求:每瓶啤酒2元,3个空酒瓶或者5个瓶盖可换1瓶啤酒.100元最多可喝多少瓶啤酒?(不允许借啤酒) 思路:利用递归算法,一次性买完,然后递归算出瓶盖和空瓶能换的啤酒数 /** ...

  7. mango后台

     环境搭建 项目配置 下载后导入项目,删除mvnw.mvnw.cmd两个文件 修改spring-boot-starter-web pom.xml --> run as --> mave i ...

  8. 出现 CannotAcquireLockException 异常

    项目出现  CannotAcquireLockException异常 原因: 百度了一下,是由于 Spring 事务嵌套造成死锁 结合自己的, handleWithdraw 方法底层有调用 其他 se ...

  9. 基于阿里云 ecs 使用 docker 方式部署 showDoc

    官网文档:https://www.showdoc.cc/help?page_id=65610 (建议先看下这个) 首先说明一下,我 ecs 镜像是 CentOS 7.6 64位 1. 首先在 服务器上 ...

  10. Spring 与 SpringBoot 的区别

    概述 Spring 与 SpringBoot 有什么区别???梳理一下 Spring 和 SpringBoot 到底有什么区别,从 Spring 和 SpringBoot 两方面入手. Spring ...