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

本文档提供了一个Java程序,用于读取指定文件夹下的所有txt文件,并进行两两比较,显示不同之处。示例中创建了4个txt文件,其中1.txt和2.txt内容相同。代码通过读取文件内容,使用Hutool库进行处理,逐行对比文件差异,输出结果。运行截图展示了文件内容的比较情况。
摘要由CSDN通过智能技术生成

你好呀,我是小邹。

今天卷一个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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会帮你解压 `lab3.zip` 文件夹,并编写一个 Python 脚本来读取并对比每个文件差异,并输出差异字符。请确保你已经将 `lab3.zip` 文件夹放在当前工作目录下。 以下是示例代码: ```python import os import difflib def compare_files(file1, file2): with open(file1, 'r') as f1, open(file2, 'r') as f2: lines1 = f1.read() lines2 = f2.read() diff = difflib.ndiff(lines1, lines2) # 输出差异字符 for line in diff: if line.startswith('- ') or line.startswith('+ '): print(line[2:], end='') def compare_directory(directory): files = os.listdir(directory) file_count = len(files) # 两两对比文件内容 for i in range(file_count - 1): for j in range(i + 1, file_count): file1 = os.path.join(directory, files[i]) file2 = os.path.join(directory, files[j]) print(f"\nComparing {files[i]} and {files[j]}:") compare_files(file1, file2) # 解压文件夹 import zipfile with zipfile.ZipFile('lab3.zip', 'r') as zip_ref: zip_ref.extractall() # 对比文件夹文件内容 compare_directory('lab3') ``` 请确保你已经安装了 Python 的 `zipfile` 模块,可以通过 `pip install zipfile` 进行安装。 在上述代码,我们首先使用 `zipfile` 模块解压了 `lab3.zip` 文件夹。然后,定义了 `compare_files` 函数来对比两个文件差异,并输出差异字符。接着,定义了 `compare_directory` 函数来遍历文件夹文件,并通过调用 `compare_files` 函数对比每对文件差异。最后,调用 `compare_directory` 函数来比较 `lab3` 文件夹的所有文件。 运行以上代码后,将会逐个对比每对文件差异,并输出差异字符。你可以根据需要进行进一步处理,比如将差异字符保存到文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值