在java中将两个csv文件合并为一个

时间:2011-12-17 11:17:14

标签: java csv opencsv

我有两个来自多个表的多列的csv文件。我正在使用opencsv来制作csv文件。 我想制作一个包含两个文件中所有列的csv文件。 两个文件中都有一个公共列。 但记录数量不一样。 请提出建议。任何帮助将不胜感激。

P.S。:加入两个文件只是意味着我想在一个文件中添加所有列。它不是数据库连接。 我想要组合的csv文件并在某些工具中使用它来生成pdf

2 个答案:

答案 0 :(得分:3)

将一个文件加载到由公共列值键入的字典中,然后将第二个文件的所有记录附加到字典中的相应条目(再次按公共列值)。
最后,将所有字典k,v对写入新文件。

即兴示例:

CSVReader r1 = ...; // reader of 1st file
CSVReader r2 = ...; // reader of 2nd file

HashMap<String,String[]> dic = new HashMap<String,String[]>();

int commonCol = 1; // index of the commonColumn

r1.readNext(); // skip header
String[] line = null;
while ((line = r1.readNext()) != null)
{
  dic.add(line[commonCol],line)
}

commonCol = 2; // index of the commonColumn in the 2nd file

r2.readNext(); // skip header
String[] line = null;
while ((line = r2.readNext()) != null)
{
  if (dic.keySet().contains(line[commonCol])
  {
    // append line to existing entry
  }
  else
  {
     // create a new entry and pre-pend it with default values
     // for the columns of file1
  }
}

foreach (String[] line : dic.valueSet())
{
   // write line to the output file.
}

答案 1 :(得分:0)

如果我们知道哪些列具有重复数据

,我们可以这样做
    int n1,n2;//stores the serial number of the column that has the duplicate data
    BufferedReader br1=new BufferedReader(new InputStreamReader(new FileInputStream(f1)));
    BufferedReader br2=new BufferedReader(new InputStreamReader(new FileInputStream(f2)));
    String line1,line2;
    while((line1=br1.readLine())!=null && (line2=br2.readLine())!=null){
        String line=line1+","+line2;
        String newL="";
        StringTokenizer st=new StringTokenizer(line,",");
        for(int i=1;i<=st.countTokens();i++){
            if((i==n1)||(i==n1+n2))
                continue;
            else
                newL=newL+","+st.nextToken();
        }
        String l=newL.substring(1);
        //write this line to the output file
    }