猿问

JAVA中简单的CSV文件比较

我使用以下代码来比较两个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

         }


白板的微信
浏览 228回答 2
2回答

慕虎7371278

您可以尝试使用此实用程序来比较 2 个 CSV 文件。csv-comparatorCsvComparator 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());

POPMUISE

像这样简化你的代码(对al2做同样的事情):ArrayList<String> al1=new ArrayList();BufferedReader CSVFile1 = new BufferedReader(new FileReader(file1));String dataRow1;while ((dataRow1 = CSVFile1.readLine()) != null) {&nbsp; &nbsp; al1.add(dataRow1);}然后从文件中查找不在另一个文件中的行(对 al1 vs al2 执行相同的操作):for (String s : al2) {&nbsp; &nbsp; if (!al1.contains(s)) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("In file 2, but not in file 1: " + s);&nbsp; &nbsp; }}for 循环为您提供不同的行。我刚刚做了System.out.println,但你可以很容易地计算它们,将它们保存到文件等。
随时随地看视频慕课网APP

相关分类

Java
我要回答