你好呀,我是小邹。
今天卷一个Java基础知识:实现对某一文件夹下的所有txt文件两两对比并分别展示差异。
准备数据
在d盘新建4个txt文件,2个sql文件(测试用,不会进行对比)
其中1.txt和2.txt完全相同。
代码实现
package top.hqxiaozou;
import cn.hutool.core.collection.CollUtil;
import java.io.File;
import java.io.FileInputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
/**
* @author: 邹祥发
* @date: 2022/8/3 13:22
*/
public class DiffTxts {
public static void main(String[] args) throws Exception {
List<String> fileNames = getFileName();
if (CollUtil.isNotEmpty(fileNames)) {
for (int j = 0; j < Objects.requireNonNull(fileNames).size(); j += 2) {
//每次取两个txt文件进行对比
File fileOld = new File(fileNames.get(j));
File fileNew = new File(fileNames.get(j + 1));
FileInputStream inputStream1 = new FileInputStream(fileOld);
int size1 = inputStream1.available();
byte[] buffer1 = new byte[size1];
inputStream1.read(buffer1);
inputStream1.close();
String fileOldStr = new String(buffer1, StandardCharsets.UTF_8);
FileInputStream inputStream2 = new FileInputStream(fileNew);
int size2 = inputStream2.available();
byte[] buffer2 = new byte[size2];
inputStream2.read(buffer2);
inputStream2.close();
String fileNewStr = new String(buffer2, StandardCharsets.UTF_8);
if (fileNewStr.equals(fileOldStr)) {
System.out.println("第" + (j + 1) + "个文件和第" + (j + 2) + "个文件完全相同!");
System.out.println();
}
String[] oldSplit = fileOldStr.split("\n");
String[] newSplit = fileNewStr.split("\n");
//旧文件
if (!fileNewStr.equals(fileOldStr)) {
System.out.println("================第" + (j + 1) + "个文件===================");
}
for (int i = 0; i < oldSplit.length; i++) {
if (!oldSplit[i].equals(newSplit[i])) {
System.out.println("第" + (i + 1) + "行:" + oldSplit[i]);
}
}
//新文件
if (!fileNewStr.equals(fileOldStr)) {
System.out.println("================第" + (j + 2) + "个文件===================");
}
for (int i = 0; i < newSplit.length; i++) {
if (i < oldSplit.length) {
if (!newSplit[i].equals(oldSplit[i])) {
System.out.println("第" + (i + 1) + "行:" + newSplit[i]);
}
} else {
System.out.println("第" + (i + 1) + "行:" + newSplit[i]);
}
}
}
} else {
System.out.println("文件夹为空!");
}
}
public static List<String> getFileName() {
// 文件夹路径
String path = "D:/txt";
File f = new File(path);
if (!f.exists()) {
//目录不存在就输出
System.out.println(path + " not exists");
return Collections.emptyList();
}
File[] fa = f.listFiles();
ArrayList<String> fileList = new ArrayList<>();
for (File fs : fa) {
if (fs.isDirectory()) {
// 目标文件为文件夹时
System.out.println(path + fs.getName() + " [目录]");
} else {
String[] split = fs.getName().split("\\.");
if (split[1].equals("txt")) {
//只添加.txt结尾的文件
fileList.add(path + "/" + fs.getName());
}
}
}
return fileList;
}
}