详解JAVA中获取文件MD5值的四种方法

yizhihongxing

下面是“详解JAVA中获取文件MD5值的四种方法”的攻略:

1. 使用Java内置的MessageDigest类获取MD5值

Java语言提供了一个DigestMessage类,它可以将任意长度的数据转换成定长的数据,如将任意长度的文件转换成128位(16个字节)的MD5值。使用如下代码可以实现获取文件的MD5值:

public static String getMD5(File file) throws Exception {
    MessageDigest md = MessageDigest.getInstance("MD5");
    FileInputStream fis = new FileInputStream(file);
    byte[] buffer = new byte[1024];
    int length = -1;
    while ((length = fis.read(buffer)) != -1) {
        md.update(buffer, 0, length);
    }
    fis.close();
    byte[] md5Bytes = md.digest();
    StringBuilder sb = new StringBuilder();
    for (byte b : md5Bytes) {
        sb.append(String.format("%02x", b & 0xff));
    }
    return sb.toString();
}

示例代码:

File file = new File("test.txt");
String md5Value = getMD5(file);
System.out.println(md5Value);

2. 使用Apache Commons Codec库获取MD5值

如果你不想使用Java内置的MessageDigest类获取文件的MD5值,你也可以使用第三方库来帮助你实现这个功能,比如Apache Commons Codec库。使用如下代码,你可以很容易地获取文件的MD5值:

public static String getMD5WithApacheCommonsCodec(File file) throws Exception {
    FileInputStream fis = new FileInputStream(file);
    String md5Value = DigestUtils.md5Hex(fis);
    fis.close();
    return md5Value;
}

示例代码:

File file = new File("test.txt");
String md5Value = getMD5WithApacheCommonsCodec(file);
System.out.println(md5Value);

3. 使用Java NIO包获取MD5值

从Java 7开始,Java NIO包提供了一个更高效的文件I/O API来进行文件的读取和写入操作。使用Java NIO包,获取文件MD5值的代码可以写成如下所示:

public static String getMD5WithJavaNIO(File file) throws Exception {
    MessageDigest md = MessageDigest.getInstance("MD5");
    FileInputStream fis = new FileInputStream(file);
    FileChannel fc = fis.getChannel();
    ByteBuffer buffer = ByteBuffer.allocate(1024);
    while (fc.read(buffer) != -1) {
        buffer.flip();
        md.update(buffer);
        buffer.clear();
    }
    fis.close();
    byte[] md5Bytes = md.digest();
    StringBuilder sb = new StringBuilder();
    for (byte b : md5Bytes) {
        sb.append(String.format("%02x", b & 0xff));
    }
    return sb.toString();
}

示例代码:

File file = new File("test.txt");
String md5Value = getMD5WithJavaNIO(file);
System.out.println(md5Value);

4. 使用Java 8的Stream API获取MD5值

如果你是一个Java 8的粉丝,那么你可能会更喜欢使用Stream API来处理文件,代码如下:

public static String getMD5WithStreamAPI(File file) throws Exception {
    MessageDigest md = MessageDigest.getInstance("MD5");
    FileInputStream fis = new FileInputStream(file);
    DigestInputStream dis = new DigestInputStream(fis, md);
    dis.readAllBytes();
    dis.close();
    byte[] md5Bytes = md.digest();
    StringBuilder sb = new StringBuilder();
    for (byte b : md5Bytes) {
        sb.append(String.format("%02x", b & 0xff));
    }
    return sb.toString();
}

示例代码:

File file = new File("test.txt");
String md5Value = getMD5WithStreamAPI(file);
System.out.println(md5Value);

以上就是“详解JAVA中获取文件MD5值的四种方法”的全部攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解JAVA中获取文件MD5值的四种方法 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 麻雀虽小五脏俱全 Dojo自定义控件应用

    麻雀虽小五脏俱全 Dojo自定义控件应用是指采用Dojo技术栈自定义开发控件实现特定功能的过程。在这个过程中,我们使用Dojo提供的模块、函数、接口等来编写自己的控件,可以根据需求自由组合、扩展,从而实现功能丰富、灵活可定制的应用程序。下面是 Dojo 自定义控件应用的详细攻略: 1. 安装 Dojo 工具包 在使用 Dojo 进行开发之前,需要先安装 Do…

    Java 2023年6月15日
    00
  • java的Hibernate框架报错“WrongClassException”的原因和解决方法

    当使用Java的Hibernate框架时,可能会遇到“WrongClassException”错误。这个错误通常是由于以下原因之一引起的: 类型不匹配:如果您的类型不匹配,则可能会出现此错误。在这种情况下,需要检查您的类型以解决此问题。 映射错误:如果您的映射错误,则可能会出现此错误。在这种情况下,需要检查您的映射以解决此问题。 以下是两个实例说明: 实例 …

    Java 2023年5月4日
    00
  • 北邮考研复试C语言上机题目精选

    北邮考研复试C语言上机题目精选攻略 基本情况 北邮考研复试C语言上机题目共有5道,考核面广,涉及到C语言各个方面,需要考生对C语言的基础知识和实际应用都有一定的掌握。 准备工作 在参加北邮考研复试C语言上机题目考试之前,需要考生准备好以下内容: 一台已经配置好编程环境的电脑。 熟悉基本的C语言语法和编程技巧:控制语句、函数、指针、数组、结构体等。 练习写C语…

    Java 2023年5月19日
    00
  • Java JDK1.5、1.6、1.7新特性整理

    Java JDK1.5、1.6、1.7新特性整理 Java JDK1.5新特性 自动装箱、拆箱 Java JDK1.5引入了自动装箱和拆箱功能,即可以自动将基本类型和它们对应的包装类型进行转换。例如: // 自动装箱 Integer i = 10; // 自动拆箱 int j = i; 可变参数 Java JDK1.5引入了可变参数功能,即可以在方法中使用任…

    Java 2023年5月24日
    00
  • Java ORM的作用是什么?

    Java ORM(Object-Relational Mapping)是一种将对象和关系型数据库映射起来实现数据持久化的技术。ORM框架使得开发人员能够使用对象来访问和操作数据库,而不用关注底层的SQL语句和数据库操作细节,从而提高了开发效率和代码质量。 ORM的作用主要有以下几点: 简化数据库操作:ORM框架提供了ORM映射机制,可以将Java对象映射到数…

    Java 2023年5月11日
    00
  • SpringBoot基于数据库实现定时任务过程解析

    下面是关于“Spring Boot基于数据库实现定时任务过程解析”的完整攻略。 1. 背景 定时任务在业务逻辑中经常被使用,而且很多时候任务调度需要依赖于数据库中的数据。Spring Boot中提供了很方便的方式来实现定时任务的功能,而且也支持基于数据库的方式来实现任务调度,本文将详细讲解如何使用Spring Boot实现基于数据库的定时任务调度。 2. 实…

    Java 2023年5月26日
    00
  • SpringBoot项目访问任意接口出现401错误的解决方案

    当我们使用SpringBoot项目访问任意接口时出现401错误,可能是因为项目的权限配置问题导致的。下面是解决它的完整攻略: 1.检查接口权限 首先我们需要检查接口权限,确定是否已经在项目中配置了相应的权限。我们可以通过查看Spring Security配置文件(一般为SecurityConfig.java)的代码或者在SpringBoot Admin管理后…

    Java 2023年5月20日
    00
  • java排序算法之冒泡排序

    Java排序算法之冒泡排序是一种简单的排序算法,它通过比较相邻两个元素的大小,如果前一个元素大于后一个元素,则交换它们的位置,重复这个过程直到整个数组排好序。 基本思路 遍历数组,将相邻两个元素进行比较,若前一个元素比后一个大,则交换它们的位置; 每遍历一轮,就可以找到当前最大或最小的元素,需要遍历数组长度减去已排序部分的次数。 代码实现 public st…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部