如何比较两个不同大小的Csv文件之间的值?

时间:2012-05-27 22:01:15

标签: java csv while-loop

我想知道循环两个csv文件并比较它们的列的最合适方法是什么。具体来说,我想将csv file1第1列与csv file2第20列的每次迭代进行比较,并检查是否存在匹配。这是我到目前为止所拥有的。另外csv file1比csv file2小得多。

public class ClassifyData {

public static void main(String[]args) throws IOException{

File file1 = new File("file1.csv");

File file2 = new File("file2.csv");
FileWriter writer = new FileWriter("/Users/home/Work.csv");
PrintWriter pw = new PrintWriter(writer);
Scanner in = new Scanner(file1);
Scanner in2 = new Scanner(file2);
boolean firstLine = true;
String[] temp = null;
String [] temp2 = null;
String line = null;
String line2 = null;

while((line = in.nextLine())!=null){

    temp= line.split(",");  
while(line2 = in2.nextLine() !=null){
    temp2 = line2.split(",");


    if(temp[0] == temp[20]){
        System.out.println("match");
        pw.append("0");
        continue;

    }




    pw.append("\n");

    }
}

pw.flush();
pw.close();
writer.close();

}

    }

2 个答案:

答案 0 :(得分:1)

if(temp[0] == temp[20])行中你可能意味着if(temp[0].equals(temp2[20]))。这将为您提供所需的比较。但是,你的内部while循环仍然不会像你想要的那样在第二个文件的开头重新开始。我不认为Scanner个对象可以从一个文件开始,即使它们可以,你也会通过一遍又一遍地读取同一个文件来浪费大量的文件读取。这样的事情会对你的磁盘更有效:

ArrayList<String> list1 = new ArrayList<String>;
while((line = in.nextLine())!=null){
    temp= line.split(",");  
    list1.add(temp[0]);
}
// ...
for(int i = 0; i < list1.size(); i++){
    for(int j = 0; j < list2.size(); j++){
        if(list1.get(i).equals(list2.get(j))){
            System.out.println("Match found");
        }
    }
}

警告: 未经测试的代码

答案 1 :(得分:0)

我认为您的解决方案无法正常运行,因为您只需浏览两个文件(您可以同时按顺序递增两个文件)。鉴于第一个文件很小,我建议完全浏览一下该文件,并将值存储在哈希表的第一列中。然后遍历第二个文件,检查第20列中的值是否出现在哈希表中。