Java实现对某一文件夹下的所有txt文件进行两两对比并展示差异

  Java   10分钟   345浏览   0评论

你好呀,我是小邹。

今天卷一个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;
    }
}

运行效果图

如果你觉得文章对你有帮助,那就请作者喝杯咖啡吧☕
微信
支付宝
  0 条评论