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.     }  

 

相关文章
|
11天前
|
Java
使用IDEA创建项目运行我的第一个JAVA文件输出Helloword
本文介绍了如何使用IDEA(IntelliJ IDEA)创建一个新的Java项目,并运行一个简单的Java程序输出"Hello Word"。文章详细展示了创建项目的步骤,包括选择JDK版本、设置项目名称和路径、创建包和类,以及编写和运行代码。最后,还展示了如何通过IDEA的运行功能来执行程序并查看输出结果。
32 4
使用IDEA创建项目运行我的第一个JAVA文件输出Helloword
|
11天前
|
Java Linux
java基础(3)安装好JDK后使用javac.exe编译java文件、java.exe运行编译好的类
本文介绍了如何在安装JDK后使用`javac.exe`编译Java文件,以及使用`java.exe`运行编译好的类文件。涵盖了JDK的安装、环境变量配置、编写Java程序、使用命令行编译和运行程序的步骤,并提供了解决中文乱码的方法。
27 1
|
5天前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
12 2
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
|
7天前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
18 4
|
9天前
|
安全 Java API
Java根据URL获取文件内容的实现方法
此示例展示了如何安全、有效地根据URL获取文件内容。它不仅展现了处理网络资源的基本技巧,还体现了良好的异常处理实践。在实际开发中,根据项目需求,你可能还需要添加额外的功能,如设置连接超时、处理HTTP响应码等。
44 4
|
15天前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
|
8天前
|
Java
Java-FileInputStream和FileOutputStream的使用,txt文件及图片文件的拷贝
这篇文章介绍了Java中FileInputStream和FileOutputStream的使用,包括如何读取和写入txt文件以及如何拷贝图片文件。
Java-FileInputStream和FileOutputStream的使用,txt文件及图片文件的拷贝
|
11天前
|
存储 缓存 监控
Java——图片文件位于 bin 目录下,下载新图片会导致应用程序重启
【9月更文挑战第22天】在Java应用中,若图片位于bin目录下且下载新图片导致应用重启,可能是因为部署方式不当或资源监控机制过于敏感。解决方法包括:更改图片存储位置至独立目录;配置应用服务器减少资源监控敏感度;使用独立资源服务器托管静态资源;优化代码减少资源重复加载。具体方案需根据应用实际情况和技术栈调整。
|
11天前
|
JSON 前端开发 JavaScript
java中post请求调用下载文件接口浏览器未弹窗而是返回一堆json,为啥
客户端调接口需要返回另存为弹窗,下载文件,但是遇到的问题是接口调用成功且不报错,浏览器F12查看居然返回一堆json,而没有另存为弹窗; > 正确的效果应该是:接口调用成功且浏览器F12不返回任何json,而是弹窗另存为窗口,直接保存文件即可。
43 2
|
27天前
|
Java API 开发者
【Java字节码的掌控者】JDK 22类文件API:解锁Java深层次的奥秘,赋能开发者无限可能!
【9月更文挑战第8天】JDK 22类文件API的引入,为Java开发者们打开了一扇通往Java字节码操控新世界的大门。通过这个API,我们可以更加深入地理解Java程序的底层行为,实现更加高效、可靠和创新的Java应用。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来,并积极探索类文件API带来的无限可能!
下一篇
无影云桌面