为了账号安全,请及时绑定邮箱和手机立即绑定

JAVA中简单的CSV文件比较

JAVA中简单的CSV文件比较

白板的微信 2022-08-17 15:59:24
我使用以下代码来比较两个CSV的file1和file2。其中 file1 是需要始终与 file2 进行比较的文件,它执行我需要的部分工作,但不能完成所有工作。我在这里主要需要3个比较。1> 与 file2 相比,file1 中缺少行 -->不起作用 {还显示文件 2 的记录,该文件不起作用}2> 文件1中不存在的附加行 -->正在工作3> 与 file2 相比,file1 中的数据不匹配 --> 正在工作 {同时显示 file1 和 file2 行,这不起作用}此外,我需要在{}中编写的注释才能正常工作。package com.mkyong;import java.io.*;import java.util.Scanner;import java.util.ArrayList;public class CSVComparison {    public static void main(String args[]) throws FileNotFoundException, IOException    {        String file1="qa_table_stats.csv";        String file2="prod_table_stats.csv";        String file3="TabStats_qa_prod.csv";        ArrayList al1=new ArrayList();        ArrayList al2=new ArrayList();        BufferedReader CSVFile1 = new BufferedReader(new FileReader(file1));        String dataRow1 = CSVFile1.readLine();        while (dataRow1 != null)        {            String[] dataArray1 = dataRow1.split("/n");            for (String item1:dataArray1)            {                al1.add(item1);            }            dataRow1 = CSVFile1.readLine(); // Read next line of data.        }         CSVFile1.close();        BufferedReader CSVFile2 = new BufferedReader(new FileReader(file2));        String dataRow2 = CSVFile2.readLine();        while (dataRow2 != null)        {            String[] dataArray2 = dataRow2.split("/n");            for (String item2:dataArray2)            {                al2.add(item2);            }            dataRow2 = CSVFile2.readLine(); // Read next line of data.        }         CSVFile2.close();         String bs = null;         for(Object o: al2)         {             bs = o.toString();             al1.remove(bs); // Checks for Additional Row in al1 and difference in rows in al1,                             // but does not check for missing rows which are in bs but not in al1         }
查看完整描述

2 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

您可以尝试使用此实用程序来比较 2 个 CSV 文件。


csv-comparator


CsvComparator comparator = CsvComparator.builder()

            .onColumns("email", "firstname", "lastname")

            .onCsvFiles(

                    "path/to/actual.csv",

                    "path/to/expected.csv")

            .byIdentityColumn("email")

            .build();


CsvComparisonResult result = comparator

            .saveDiffAt("build/csv-results")

            .perform();


// Check diff:

Assertions.assertTrue(result.hasDiff());


// Check addition, deletion, modification are also:

Assertions.assertTrue(result.hasRowAdded());

Assertions.assertTrue(result.hasRowDeleted());

Assertions.assertTrue(result.hasRowModified());


查看完整回答
反对 回复 2022-08-17
?
POPMUISE

TA贡献1765条经验 获得超5个赞

像这样简化你的代码(对al2做同样的事情):


ArrayList<String> al1=new ArrayList();

BufferedReader CSVFile1 = new BufferedReader(new FileReader(file1));

String dataRow1;

while ((dataRow1 = CSVFile1.readLine()) != null) {

    al1.add(dataRow1);

}

然后从文件中查找不在另一个文件中的行(对 al1 vs al2 执行相同的操作):


for (String s : al2) {

    if (!al1.contains(s)) {

        System.out.println("In file 2, but not in file 1: " + s);

    }

}

for 循环为您提供不同的行。我刚刚做了System.out.println,但你可以很容易地计算它们,将它们保存到文件等。


查看完整回答
反对 回复 2022-08-17
  • 2 回答
  • 0 关注
  • 227 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号