Java 判断两个文件是否相同
使用Java 如何判断两个文件是否相同呢?我的做法是
(1)先比较两个文件内容的长度;
(2)在长度相同的情况下,再比较两个文件的MD5值。
需要引入的Jar 包:
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.11</version>
</dependency>
先提供一个验证两个文件字节流是否一致的函数:
/**
* 验证两个文件字节流是否相等
* @return boolean true 相等
* @throws IOException
*/
private static boolean isSameFiles(byte[] fileByte1, byte[] fileByte2) {
String firstFileMd5 = DigestUtils.md5Hex(fileByte1);
String secondFileMd5 = DigestUtils.md5Hex(fileByte2);
if (firstFileMd5.equals(secondFileMd5)) {
System.out.println("---- equals ------ md5 " + firstFileMd5);
return true;
} else {
System.out.println(firstFileMd5 + " is firstFileMd5 ++ unequal ++ secondFileMd5 = " + secondFileMd5);
return false;
}
}
1 校验base64 位字符串形式的文件是否相等
直接把字符串转成字节数组,然后调用isSameFiles函数。
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
String img = "iVBORw0KGgoAAAANSUhEUgAAApsAAAEPCAYAAAANjQ+sAAAOqUlEQVR4Xu3WMREAAAgDMerfNCp+CwI65Bh+5wgQIECAAAECBAhEAot2zRIgQIAAAQIECBA4sekJCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDIBsZnRGiZAgAABAgQIEBCbfoAAAQIECBAgQCATEJsZrWECBAgQIECAAAGx6QcIECBAgAABAgQyAbGZ0RomQIAAAQIECBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDIBsZnRGiZAgAABAgQIEBCbfoAAAQIECBAgQCATEJsZrWECBAgQIECAAAGx6QcIECBAgAABAgQyAbGZ0RomQIAAAQIECBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDIBsZnRGiZAgAABAgQIEBCbfoAAAQIECBAgQCATEJsZrWECBAgQIECAAAGx6QcIECBAgAABAgQyAbGZ0RomQIAAAQIECBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDIBsZnRGiZAgAABAgQIEBCbfoAAAQIECBAgQCATEJsZrWECBAgQIECAAAGx6QcIECBAgAABAgQyAbGZ0RomQIAAAQIECBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDIBsZnRGiZAgAABAgQIEBCbfoAAAQIECBAgQCATEJsZrWECBAgQIECAAAGx6QcIECBAgAABAgQyAbGZ0RomQIAAAQIECBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDIBsZnRGiZAgAABAgQIEBCbfoAAAQIECBAgQCATEJsZrWECBAgQIECAAAGx6QcIECBAgAABAgQyAbGZ0RomQIAAAQIECBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDIBsZnRGiZAgAABAgQIEBCbfoAAAQIECBAgQCATEJsZrWECBAgQIECAAAGx6QcIECBAgAABAgQyAbGZ0RomQIAAAQIECBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDIBsZnRGiZAgAABAgQIEBCbfoAAAQIECBAgQCATEJsZrWECBAgQIECAAAGx6QcIECBAgAABAgQyAbGZ0RomQIAAAQIECBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDIBsZnRGiZAgAABAgQIEBCbfoAAAQIECBAgQCATEJsZrWECBAgQIECAAAGx6QcIECBAgAABAgQyAbGZ0RomQIAAAQIECBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDIBsZnRGiZAgAABAgQIEBCbfoAAAQIECBAgQCATEJsZrWECBAgQIECAAAGx6QcIECBAgAABAgQyAbGZ0RomQIAAAQIECBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDIBsZnRGiZAgAABAgQIEBCbfoAAAQIECBAgQCATEJsZrWECBAgQIECAAAGx6QcIECBAgAABAgQyAbGZ0RomQIAAAQIECBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDIBsZnRGiZAgAABAgQIEBCbfoAAAQIECBAgQCATEJsZrWECBAgQIECAAAGx6QcIECBAgAABAgQyAbGZ0RomQIAAAQIECBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDIBsZnRGiZAgAABAgQIEBCbfoAAAQIECBAgQCATEJsZrWECBAgQIECAAAGx6QcIECBAgAABAgQyAbGZ0RomQIAAAQIECBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDIBsZnRGiZAgAABAgQIEBCbfoAAAQIECBAgQCATEJsZrWECBAgQIECAAAGx6QcIECBAgAABAgQyAbGZ0RomQIAAAQIECBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDIBsZnRGiZAgAABAgQIEBCbfoAAAQIECBAgQCATEJsZrWECBAgQIECAAAGx6QcIECBAgAABAgQyAbGZ0RomQIAAAQIECBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDIBsZnRGiZAgAABAgQIEBCbfoAAAQIECBAgQCATEJsZrWECBAgQIECAAAGx6QcIECBAgAABAgQyAbGZ0RomQIAAAQIECBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDIBsZnRGiZAgAABAgQIEBCbfoAAAQIECBAgQCATEJsZrWECBAgQIECAAAGx6QcIECBAgAABAgQyAbGZ0RomQIAAAQIECBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDIBsZnRGiZAgAABAgQIEBCbfoAAAQIECBAgQCATEJsZrWECBAgQIECAAAGx6QcIECBAgAABAgQyAbGZ0RomQIAAAQIECBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDIBsZnRGiZAgAABAgQIEBCbfoAAAQIECBAgQCATEJsZrWECBAgQIECAAAGx6QcIECBAgAABAgQyAbGZ0RomQIAAAQIECBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDIBsZnRGiZAgAABAgQIEBCbfoAAAQIECBAgQCATEJsZrWECBAgQIECAAAGx6QcIECBAgAABAgQyAbGZ0RomQIAAAQIECBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDIBsZnRGiZAgAABAgQIEBCbfoAAAQIECBAgQCATEJsZrWECBAgQIECAAAGx6QcIECBAgAABAgQyAbGZ0RomQIAAAQIECBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDIBsZnRGiZAgAABAgQIEBCbfoAAAQIECBAgQCATEJsZrWECBAgQIECAAAGx6QcIECBAgAABAgQyAbGZ0RomQIAAAQIECBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+gAABAgQIECBAIBMQmxmtYQIECBAgQIAAAbHpBwgQIECAAAECBDKBB16TARB6VWp0AAAAAElFTkSuQmCC";
String imgReal = "iVBOI=";
BASE64Decoder decoder = new BASE64Decoder();
if (isBase64(img)) {
System.out.println("img is base 64");
}
if (isBase64(imgReal)) {
System.out.println("imgReal is base 64");
}
byte[] imageByteArray = null;
try {
imageByteArray = decoder.decodeBuffer(img);
System.out.println(isSameFiles(imageByteArray, decoder.decodeBuffer(imgReal)));
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(checkFile());
}
2 校验两个文件是否相等
读取文件后,将其转换成字节流:
/**
* 检查两个文件是否相等,假设 C:\Users\Pictures目录下有两个图片文件
* @return boolean true 相等
* @throws IOException
*/
private static boolean checkFile() throws IOException {
File file1 = new File("C:\\Users\\Pictures\\test1.jpg");
File file2 = new File("C:\\Users\\Pictures\\test2.jpg");
if (file1.length() != file2.length()) {
System.out.println("+++++++++ unequal +++++++++++++");
return false;
}
InputStream fileStream1 = new FileInputStream(file1);
InputStream fileStream2 = new FileInputStream(file2);
// InputStream 转 byte[]
byte[] imageByteArray = new byte[fileStream1.available()];
System.out.println(isSameFiles(imageByteArray, new byte[fileStream2.available()]));
return true;
}
以上方法验证小文件妥妥的,大文件请移步:《JAVA MD5 验证大文件(改)》
Reference
https://blog.csdn.net/wxz980927155/article/details/82257225
https://www.cnblogs.com/DylanZ/p/6269042.html
Java 判断两个文件是否相同的更多相关文章
- C# 通过比对哈希码判断两个文件内容是否相同
1.使用System.security.Cryptography.HashAlgorithm类为每个文件生成一个哈希码,然后比较两个哈希码是否一致. 2. 在比较文件内容的时候可以采用好几种方法.例如 ...
- JAVA - 判断两个浮点数相等
JAVA - 判断两个浮点数相等 背景知识 float型和double型是JAVA的基本类型,用于浮点数表示,在JAVA中float型占4个字节32位,double型占8个字节64位,一般比较适合用于 ...
- Java 判断两个对象是否相等
一.使用 == 与 equals == : 它的作用是判断两个对象的地址是不是相等.即,判断两个对象是不是同一个对象.(基本数据类型==比较的是值,引用数据类型==比较的是内存地址) equals() ...
- Java判断两个List是否相同
1.利用Java中为List提供的方法retainAll() /** * 判断两个List内的元素是否相同 * <p> * 此方法有bug 见Food.class * * @param l ...
- java 判断两个时间相差的天数
1.实现目标 输入:两个日期 输出:两个日期相差的天数 2.代码实现 方法1: 通过Calendar类的日期比较.注意:这里需要考虑一下: 日期是跨年份的,如一个是2012年,一个是2015年的 ...
- shell怎么判断两个文件内容是否相同
#cat diff_two_file#/bin/sbinfile1=/mnt/mmc/test/aafile2=/mnt/mmc/test/bbdiff $file1 $file2 > /dev ...
- Java判断两个时间相差的天数
1.实现目标 输入:两个日期 输出:两个日期相差的天数 2.代码实现 方法1: 通过Calendar类的日期比较.注意:这里需要考虑一下: 日期是跨年份的,如一个是2012年,一个是2015年的 ...
- java判断两个时间相差得天数
方法一:通过Calendar类得日期比较,在这需要考虑闰年和平年,也要考虑跨年份 /** * date2比date1多的天数 * @param date1 * @param date2 * @retu ...
- java 判断两个数是否异号
java 整型int占4个字节32位,两个数异或后移动31位判断结果,如果是1则异号,如果是0则同号 public class ShowEnviromentViarible { public stat ...
- 【转】【C#】判断两个文件是否相同
使用System.security.Cryptography.HashAlgorithm类为每个文件生成一个哈希码,然后比较两个哈希码是否相同 该哈希算法为一个文件生成一个小的二进制“指纹”,从统计学 ...
随机推荐
- linux系统升级/更新OpenSSL版本操作流程记录
问题描述:有时OpenSSL版本过老升级,或者需要更新OpenSSL版本 1.登录linux系统后输入openssl version 查看现在使用的版本 我的输入后版本信息为:OpenSSL 1.1. ...
- 豆包:php如何模拟多客户端访问服务器
在 PHP 中模拟多客户端访问服务器可以通过以下几种方式实现,具体方法根据需求选择: 方法 1:使用 cURL 多请求(Multi Handle) 通过 curl_multi_* 系列函数实现并发 ...
- Escalate_Linux靶机提权学习
靶机下载 https://www.vulnhub.com/entry/escalate_linux-1,323/ 用VMware打开 扫描端口 nmap -sS -sV -n -T4 -p- 192. ...
- DevOps - DevOps基础概念梳理
目录 DevOps DevOps的好处与价值 可能的几个关注点 DevOps能力环 DevOps与持续集成.持续交付 一个完整的过程 典型的CICD流水线过程 DevOps黄金思维圈 初见 一些图示 ...
- vue实现不同用户权限的方法
Vue 实现不同用户权限的方法 在项目中,实现不同用户的权限控制是常见的需求也是常见的功能模块,例如管理系统中不同角色(管理员.普通用户等)应有不同的访问权限,小程序.App等在不同角色登入的时候显示 ...
- 【Linux】5.2 Shell变量
Shell变量 1. shell变量简介 Linux Shell的变量分为,系统变量和用户自定义变量 系统变量: $HOME. $PWD. $SHELL. $USER等等 显示当前shell中所有变量 ...
- 【C语言】格式符
对于很多人来说,用格式符都是熟能生巧,而不清楚为什么是那样的格式符,所以我在这列了一个表,翻译了其对应的英文. 进制名称 英文 缩写 二进制 Binary B 八进制 Octal O 十进制 Deci ...
- Dify开发必备:分享8个官方文档不曾解释的关键技巧
Dify 是一个帮助你快速搭建 AI 应用的工具,其定位类似Coze.但相比Coze--Dify是免费的.开源的,人人都可以用.哪怕你不懂编程,也能用它参与到 AI 应用的设计和使用中.总之,如果你是 ...
- SRE网站可靠性工程师
SRE网站可靠性工程师 SRE需要做什么? 一般: 故障模式,尤其是SPOF(单点故障).消除SPOFs是你作为SRE最大的挑战和乐趣. 基础设施组件,从应用程序到硬件(服务器.交换机.路由器.互联网 ...
- ReentrantLock底层源码分析
一.简单使用 在聊它的源码之前,我们先来做个简单的使用说明.当我在IDEA中创建了一个简单的Demo之后,它会给出以下提示 提示文字 在使用阻塞等待获取锁的方式中,必须在try代码块之外,并且在加锁方 ...