Java 如何校验两个文件内容是同样的?
发布时间:2021-12-06 15:47:57 所属栏目:语言 来源:互联网
导读:如果两个文件的内容相同,那么它们的摘要应该是相同的。这个原理能不能帮助我们鉴定两个文件是否相同呢? Java实现文件摘要 带着这个疑问,我写了一个文件摘要提取工具类: /** * 提取文件 checksum * * @param path 文件全路径 * @param algorithm 算法名 例
如果两个文件的内容相同,那么它们的摘要应该是相同的。这个原理能不能帮助我们鉴定两个文件是否相同呢? 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); } 接下来做几组对照试验来证明猜想。 内容不变 首先要证明一个文件在内容不变的情况下摘要是否有变化,多次执行下面的代码,断言始终都是true。 String path = "C:Userss1IdeaProjectsdemosrcmainresourcesapplication.yml"; String checksum = extractChecksum(path, "SHA-1"); String hash = "6bf4d6c101b4a7821226d3ec1f8d778a531bf265"; Assertions.assertEquals(hash,checksum); 而且我把文件名改成application-dev.yml,甚至application-dev.txt摘要都是相同的。我又把yml文件的内容作了改动,断言就false了。这证明了单个文件的情况下,内容不变,hash是不变的。 (编辑:好传媒网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐
热点阅读