读取CSV文件并根据条件写回CSV文件

时间:2014-10-15 23:28:09

标签: java csv

我是java的新手。我需要阅读以下面给出的格式收到的输入数据(csv)(大量记录):

A,1
A,2
B,3
B,4
C,5
C,6
A,7
A,8
B,9
B,10 ...

我正在使用PrintWriter将数据写入新的CSV文件。有没有一种方法可以从上面的数据以这种方式写入新的csv文件?这里的条件基于值A,B,C。

A,B,C
1,3,5
2,4,6
7,9
8,10...

1 个答案:

答案 0 :(得分:0)

我认为如果总有A,B和C这是可能的。但是这个想法可以扩展到有限数量的常量

你可以做的就是......

public void computeNewCSV() {
    List<Integer> a = new LinkedList<Integer>();
    List<Integer> b = new LinkedList<Integer>();
    List<Integer> c = new LinkedList<Integer>(); 

    FileInputStream fis = new FileInputStream("input_file");
    BufferedReader br = new BufferedReader(new InputStreamReader(fis, Charset.forName("UTF-8")));
    String line;
    while ((line = br.readLine()) != null) {
       String split[] = line.split(","); 
       if(split[0].equals("A") {
           a.add(Integer.parseInt(split[1]));
       } else if (split[0].equals("B") {
           b.add(Integer.parseInt(split[1]));
       } else if (split[0].equals("C") {
           c.add(Integer.parseInt(split[1]));
       }
    }
    br.close();
    fis.close();

    //Now you have the complete information to be put into the new file.

    PrintWriter writer = new PrintWriter("output-file-name", "UTF-8");
    writer.println("A,B,C");
    while(!(a.isEmpty && b.isEmpty() && c.isEmpty())) {
        StringBuilder sb = new StringBuilder("");
        if(!a.isEmpty()) {
            sb.append(a.remove(0)); 
        } 
        sb.append(",");     
        if(!b.isEmpty()) {
            sb.append(b.remove(0)); 
        } 
        sb.append(",");
        if(!c.isEmpty()) {
            sb.append(c.remove(0)); 
        } 
        writer.println(sb.toString());
    }

    writer.close();
}