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

下面是“详解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日

相关文章

  • JDK9的新特性之String压缩和字符编码的实现方法

    JDK9的新特性之String压缩和字符编码的实现方法 JDK9中,String类实现了对UTF-16字符集的压缩和解压缩,从而有效地减少了字符串在内存中的占用空间。本文将详细介绍String压缩和字符编码的实现方法。 String压缩原理 JDK9中,String压缩原理基于字符数据分析算法,将连续出现的ASCII字符或Latin-1字符转换为单个字节,从…

    Java 2023年5月20日
    00
  • 深入理解StringBuilder的使用方法

    下面是深入理解StringBuilder的使用方法的攻略。 StringBuilder简介 在Java中,字符串是不可变的对象,每次更改字符串都会创建一个新的字符串对象,导致不必要的内存浪费。而StringBuilder则可以动态地添加、修改、删除字符串内容,不需要创建新的对象,从而提高程序性能。 StringBuilder常用操作方法 构造方法 Strin…

    Java 2023年5月19日
    00
  • mybatis xml 中 大于、小于、等于 写法

    在 *.xml 中使用常规的 < > = <= >= 会与xml的语法存在冲突 方法一:使用xml 原生转义的方式进行转义 字符名称 sql符号 转义字符 大于号 > &gt; 小于号 < &lt; 不等于 <> &lt;&gt; 大于等于号 >= &gt;= 小于…

    Java 2023年4月25日
    00
  • 详解spring整合shiro权限管理与数据库设计

    详解Spring整合Shiro权限管理与数据库设计 引言 本文详细讲解如何使用Spring框架整合Shiro权限管理,并给出完整的数据库设计方案和示例代码。 Shiro简介 Shiro是一个强大的Java安全框架,可以提供身份认证、授权、加密等各种安全相关的功能。Shiro使用非常简单,易于集成到Java应用中。 Spring整合Shiro权限管理 引入Sh…

    Java 2023年5月20日
    00
  • Java的后台文件夹下文件的遍历完整代码

    下面给您详细讲解Java后台文件夹下文件遍历的完整攻略。 一、文件夹遍历基本原理 首先需要一个File对象,用来表示文件夹或文件; 通过该File对象调用listFiles()方法获取该文件夹下的所有子文件或子文件夹; 遍历得到的子文件或子文件夹,如果是文件夹,递归调用自身方法,如果是文件,则可以直接操作。 二、Java后台文件夹遍历完整代码 import …

    Java 2023年5月20日
    00
  • Intellij IDEA 与maven 版本不符 Unable to import maven project See logs for details: No implementation for org.apache.maven.model.path.PathTranslator was bound

    这个错误提示通常是由于Intellij IDEA和Maven版本不匹配导致的。以下是一些解决此问题的攻略: 1. 通过设置maven home目录解决 请先确定你正在使用的Intellij IDEA是否与Maven版本兼容。在Intellij IDEA的Maven设置中,设置正确的Maven home目录。如果Maven home目录没有设置正确,会导致In…

    Java 2023年5月20日
    00
  • 微信小程序组件化开发的实战步骤

    下面我会详细讲解“微信小程序组件化开发的实战步骤”的完整攻略,共分为以下几个步骤: 1. 创建自定义组件 首先,在小程序项目中新建一个文件夹,用来存放自定义组件。命名可以根据需要自行定义,这里以 components 为例。在文件夹中按照组件的需求创建各个组件文件夹,比如 toast(提示框组件)、modal(弹框组件)等。 在组件文件夹中,需要新建三个文件…

    Java 2023年5月23日
    00
  • springboot配置templates直接访问的实现

    下面是springboot配置templates直接访问的实现攻略: 1、添加Maven依赖 在pom.xml文件中添加以下Maven依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-star…

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