Простое сравнение файлов CSV в JAVA - PullRequest
0 голосов
/ 18 марта 2019

Я использую код ниже, чтобы сравнить два файла CSV file1 и file2. Где file1 - это файл, который нужно всегда сравнивать с file2, он выполняет ту частичную работу, которая мне нужна, но не выполняет всего. Здесь мне в основном нужно 3 сравнения.

1> Отсутствуют строки в файле1 по сравнению с файлом2 -> Не работает {также отображаются записи файла2, который не работает}

2> Дополнительная строка в файле1, которой нет в файле2 -> Рабочая

3> Несоответствие данных в file1 по сравнению с file2 -> Working {также отображать строки 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
         }

         int size=al1.size();
         System.out.println(size);
         System.out.println(bs);

         try
            {
                FileWriter writer=new FileWriter(file3);
                while(size!=0)
                {
                    size--;
                    writer.append(""+al1.get(size));
                    writer.append('\n');
                }
                writer.flush();
                writer.close();
            }
            catch(IOException e)
            {
                e.printStackTrace();
            }
    }
}

1 Ответ

0 голосов
/ 18 марта 2019

Упростите ваш код следующим образом (сделайте то же самое для al2):

ArrayList<String> al1=new ArrayList();
BufferedReader CSVFile1 = new BufferedReader(new FileReader(file1));
String dataRow1;
while ((dataRow1 = CSVFile1.readLine()) != null) {
    al1.add(dataRow1);
}

Затем найдите строки из файла, которых нет в другом (сделайте то же самое для al1 против 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, но вы можете легко сосчитать их, сохранить их в файл и т. Д.

...