java 获取文件MD5值

简介:

Java 中,如何获取文件的MD5值呢?如何比较两个文件是否完全相同呢?

Java代码   收藏代码
  1. /** 
  2.      * Get MD5 of one file:hex string,test OK! 
  3.      *  
  4.      * @param file 
  5.      * @return 
  6.      */  
  7.     public static String getFileMD5(File file) {  
  8.         if (!file.exists() || !file.isFile()) {  
  9.             return null;  
  10.         }  
  11.         MessageDigest digest = null;  
  12.         FileInputStream in = null;  
  13.         byte buffer[] = new byte[1024];  
  14.         int len;  
  15.         try {  
  16.             digest = MessageDigest.getInstance("MD5");  
  17.             in = new FileInputStream(file);  
  18.             while ((len = in.read(buffer, 01024)) != NEGATIVE_ONE) {  
  19.                 digest.update(buffer, 0, len);  
  20.             }  
  21.             in.close();  
  22.         } catch (Exception e) {  
  23.             e.printStackTrace();  
  24.             return null;  
  25.         }  
  26.         BigInteger bigInt = new BigInteger(1, digest.digest());  
  27.         return bigInt.toString(16);  
  28.     }  
  29.   
  30.     /*** 
  31.      * Get MD5 of one file!test ok! 
  32.      *  
  33.      * @param filepath 
  34.      * @return 
  35.      */  
  36.     public static String getFileMD5(String filepath) {  
  37.         File file = new File(filepath);  
  38.         return getFileMD5(file);  
  39.     }  
  40.   
  41.     /** 
  42.      * MD5 encrypt,test ok 
  43.      *  
  44.      * @param data 
  45.      * @return byte[] 
  46.      * @throws Exception 
  47.      */  
  48.     public static byte[] encryptMD5(byte[] data) throws Exception {  
  49.   
  50.         MessageDigest md5 = MessageDigest.getInstance(SystemUtil.KEY_MD5);  
  51.         md5.update(data);  
  52.         return md5.digest();  
  53.     }  
  54.   
  55.     public static byte[] encryptMD5(String data) throws Exception {  
  56.         return encryptMD5(data.getBytes(SystemUtil.CHARSET_ISO88591));  
  57.     }  
  58.     /*** 
  59.      * compare two file by Md5 
  60.      *  
  61.      * @param file1 
  62.      * @param file2 
  63.      * @return 
  64.      */  
  65.     public static boolean isSameMd5(File file1,File file2){  
  66.         String md5_1=SystemUtil.getFileMD5(file1);  
  67.         String md5_2=SystemUtil.getFileMD5(file2);  
  68.         return md5_1.equals(md5_2);  
  69.     }  
  70.     /*** 
  71.      * compare two file by Md5 
  72.      *  
  73.      * @param filepath1 
  74.      * @param filepath2 
  75.      * @return 
  76.      */  
  77.     public static boolean isSameMd5(String filepath1,String filepath2){  
  78.         File file1=new File(filepath1);  
  79.         File file2=new File(filepath2);  
  80.         return isSameMd5(file1, file2);  
  81.     }  

 测试(使用junit):

Java代码   收藏代码
  1. @Test  
  2.     public void test_getFileMD5() throws Exception{  
  3.         String filepath="D:\\download\\3_尚学堂_UML概览.avi";  
  4. //      File file=new File(filepath);  
  5.         String md5_1=SystemUtil.getFileMD5(filepath);  
  6.         System.out.println(md5_1);  
  7.           
  8.         byte[]bytes=FileUtils.readBytes4file(filepath);  
  9.         byte[]md5=SystemUtil.encryptMD5(bytes);  
  10.         String md5_2=SystemUtil.toHexString(md5);  
  11.         System.out.println(md5_2);  
  12.         Assert.assertEquals(md5_1, md5_2);  
  13.     }  

 

相关文章
|
2月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
84 9
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
92 2
|
8天前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
57 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
29天前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
86 34
|
2月前
|
消息中间件 存储 Java
RocketMQ文件刷盘机制深度解析与Java模拟实现
【11月更文挑战第22天】在现代分布式系统中,消息队列(Message Queue, MQ)作为一种重要的中间件,扮演着连接不同服务、实现异步通信和消息解耦的关键角色。Apache RocketMQ作为一款高性能的分布式消息中间件,广泛应用于实时数据流处理、日志流处理等场景。为了保证消息的可靠性,RocketMQ引入了一种称为“刷盘”的机制,将消息从内存写入到磁盘中,确保消息持久化。本文将从底层原理、业务场景、概念、功能点等方面深入解析RocketMQ的文件刷盘机制,并使用Java模拟实现类似的功能。
46 3
|
2月前
|
Java 测试技术 Maven
Maven clean 提示文件 java.io.IOException
在使用Maven进行项目打包时,遇到了`Failed to delete`错误,尝试手动删除目标文件也失败,提示`java.io.IOException`。经过分析,发现问题是由于`sys-info.log`文件被其他进程占用。解决方法是关闭IDEA和相关Java进程,清理隐藏的Java进程后重新尝试Maven clean操作。最终问题得以解决。总结:遇到此类问题时,可以通过任务管理器清理相关进程或重启电脑来解决。
|
2月前
|
存储 缓存 安全
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见。本文介绍了使用 `File.createTempFile` 方法和自定义创建临时文件的两种方式,详细探讨了它们的使用场景和注意事项,包括数据缓存、文件上传下载和日志记录等。强调了清理临时文件、确保文件名唯一性和合理设置文件权限的重要性。
151 2
|
2月前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
74 4
|
2月前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
98 4
|
2月前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
57 5