java - 在JAVA中比较两个BIG文本文件内容的最快方法是什么
问题描述
我有两个超过 600MB 的文本文件,如果它们相同,我想比较它们的内容(忽略末尾的任何空格或其中任何行的开头,即trim()
每一行)。我正在考虑将它们的每一行作为字符串读取,然后对其进行修剪并进行比较。
有没有更好的想法,如果没有,最快的实现是什么?提前致谢。
解决方案
如果要比较文件是否一致,请计算文件md5值进行比较:</p>
import java.io.FileInputStream;
import java.io.InputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class MainServer {
public static void main(String[] args) {
String filePath1 = "D:\\Download\\a.mp3";
String filePath2 = "D:\\Download\\b.mp3";
String file1_md5 = md5HashCode(filePath1);
String file2_md5 = md5HashCode(filePath2);
System.out.println(file1_md5);
System.out.println(file2_md5);
if(file1_md5.equals(file2_md5)){
System.out.println("Two files are the same ");
}
}
/**
* get file md5 value
*/
public static String md5HashCode(String filePath) {
try {
InputStream fis =new FileInputStream(filePath);
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] buffer = new byte[1024];
int length = -1;
while ((length = fis.read(buffer, 0, 1024)) != -1) {
md.update(buffer, 0, length);
}
fis.close();
byte[] md5Bytes = md.digest();
BigInteger bigInt = new BigInteger(1, md5Bytes);
return bigInt.toString(16);
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
}
如果需要读取文件的每一行进行比较:</p>
List<String> file1_lines = null;
List<String> file2_lines = null;
try {
file1_lines = Files.readAllLines(Paths.get("D:/a.txt"), StandardCharsets.UTF_8);
file2_lines = Files.readAllLines(Paths.get("D:/b.txt"), StandardCharsets.UTF_8);
} catch (IOException e) {
e.printStackTrace();
}
for (int i = 0; i < file1_lines.size(); i++) {
String file1_line = file1_lines.get(i).trim();
String file2_line = file2_lines.get(i).trim();
if (file1_line.equals(file2_line)) {
//do some
}
}
推荐阅读
- java - 计算器宁静错误部署
- vb.net - 如何将字符串插入到符合条件的其他特定字符串中?
- oracle - 应用程序无法访问在 oracle 数据库中创建的表
- sharepoint-online - 无法将 Html 内容转换为 Pdf
- php - 如何使用 PHP 循环检查 MySQL 中的重复项
- python - 如何使张量流初始模型适用于输入通道大于 3 的图像堆栈?
- java - 使用休眠搜索和弹性搜索示例代码的搜索引擎实现
- python - Photoutils/Aperture 测光正在触发“Nonetype”错误
- postgresql - 如何在 PostgreSQL 中创建一个 uint256
- python - Python字典值转换为字典列表