我已阅读其他已回答/提问的问题,但没有人处理我的问题
我有2个CSV文件,我已经构建了一个程序来比较文件,方法是从File2
中减去File1
中的信息,将结果保存到File3
。目前虽然我的程序只是将一个CSV文件与一列比较,另一个CSV文件与一列(CustomerName)进行比较。
这个程序有效!
我的问题是:我有没有办法将一个包含4列的CSV文件与包含1列的CSV文件进行比较并让它减去差异(就像我现在的代码那样)但不是只需减去column1中的差异,但减去差异和相应的行。
为了更好地解释,因为我很难说清楚我的问题,让我举一个例子:
让我们说File1.csv包含每个客户
Customer Phone Email Zip
Colt 123456 123@gmail 123456
Mary 321654 123@gmail 123456
John 789654 123@gmail 123456
Trey 987456 123@gmail 123456
并且假设File2.csv仅包含我想从File1.csv中删除的那些
Customer
Colt
John
我想要的是这个:
Customer Phone Email Zip
Mary 321654 123@gmail 123456
Trey 987456 123@gmail 123456
因此,只要了解CustomerName,我希望它不仅删除名称,还删除相应的行。
这可能吗?
对于任何好奇的人来说,这是我目前只使用1列CSV文件的代码。
package csvdatacompareapplication;
import java.io.*;
import java.util.ArrayList;
/* file1 - file2 = file3*/
public class CSVDataCompareApplication {
public static void main(String args[]) throws FileNotFoundException, IOException
{
String path="C:\\Desktop\\";
String file1="customerListAllCustomers.csv";
String file2="customerListToRemove.csv";
String file3="newCustomerList.csv";
ArrayList<String> arrayList1=new ArrayList<String>();
ArrayList<String> arrayList2=new ArrayList<String>();
//ArrayList al3=new ArrayList();
BufferedReader CSVFile1 = new BufferedReader(new FileReader(path+file1));
String dataRow1 = CSVFile1.readLine();
while (dataRow1 != null)
{
String[] dataArray1 = dataRow1.split(" , ");
for (String item1:dataArray1)
{
arrayList1.add(item1);
}
dataRow1 = CSVFile1.readLine(); // Read next line of data.
}
CSVFile1.close();
BufferedReader CSVFile2 = new BufferedReader(new FileReader(path+file2));
String dataRow2 = CSVFile2.readLine();
while (dataRow2 != null)
{
String[] dataArray2 = dataRow2.split(" , ");
for (String item2:dataArray2)
{
arrayList2.add(item2);
}
dataRow2 = CSVFile2.readLine(); // Read next line of data.
}
CSVFile2.close();
for(String bs:arrayList2)
{
arrayList1.remove(bs);
}
int size=arrayList1.size();
System.out.println(size);
try
{
FileWriter writer=new FileWriter(path+file3);
while(size!=0)
{
size--;
writer.append(""+arrayList1.get(size));
writer.append('\n');
}
writer.flush();
writer.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}