zhangrui.i
zhangrui.i
发布于 2024-12-11 / 1 阅读
0
0

Java如何校验两个文件内容是相同的?

Java实现文件摘要

/**
     * 提取文件 checksum 
     *
     * @param path      文件全路径
     * @param algorithm  算法名 例如 MD5、SHA-1、SHA-256等
     * @return  checksum
     * @throws NoSuchAlgorithmException the no such algorithm exception
     * @throws IOException              the io exception
     */
    public static String extractChecksum(String path, String algorithm) throws NoSuchAlgorithmException, IOException {
        // 根据算法名称初始化摘要算法
        MessageDigest digest = MessageDigest.getInstance(algorithm);
        // 读取文件的所有比特
        byte[] fileBytes = Files.readAllBytes(Paths.get(path));
        // 摘要更新
        digest.update(fileBytes);
        //完成哈希摘要计算并返回特征值
        byte[] digested = digest.digest();
        // 进行十六进制的输出
        return HexUtils.toHexString(digested);
    }

结论

  • 在相同算法下,任何新建空文件的摘要值都是固定的。

  • 任何两个内容相同的文件的摘要值都是相同的,和路径、文件名、文件类型无关。

  • 文件的摘要值会随着文件内容的改变而改变。


评论