Java 判斷兩個文件是否相同
使用Java 如何判斷兩個文件是否相同呢?我的做法是
(1)先比較兩個文件內(nèi)容的長度;
(2)在長度相同的情況下,再比較兩個文件的MD5值。
需要引入的Jar 包:
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.11</version>
</dependency>
先提供一個驗證兩個文件字節(jié)流是否一致的函數(shù):
/**
* 驗證兩個文件字節(jié)流是否相等
* @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 位字符串形式的文件是否相等
直接把字符串轉(zhuǎn)成字節(jié)數(shù)組,然后調(diào)用isSameFiles函數(shù)。
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
String img = "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CBAQm36AAAECBAgQIEAgExCbGa1hAgQIECBAgAABsekHCBAgQIAAAQIEMgGxmdEaJkCAAAECBAgQEJt+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());
}
/**
* 校驗字符串是否為base64 的
*
* @param str
* @return
*/
private static boolean isBase64(String str) {
String base64Pattern = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";
return Pattern.matches(base64Pattern, str);
}
2 校驗兩個文件是否相等
讀取文件后,將其轉(zhuǎn)換成字節(jié)流:
/**
* 檢查兩個文件是否相等,假設(shè) 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 轉(zhuǎn) 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
http://www.rzrgm.cn/DylanZ/p/6269042.html
讀后有收獲,小禮物走一走,請作者喝咖啡。
Buy me a coffee. ?Get red packets.作者:樓蘭胡楊
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但請注明原文鏈接,并保留此段聲明,否則保留追究法律責(zé)任的權(quán)利。

浙公網(wǎng)安備 33010602011771號