在csv java上逐列分隔元素

时间:2017-04-04 09:09:15

标签: java maven csv

我的csv有这个问题,我有一个带有String值的数组,我想把它放在一个csv文件中,但我也希望每个元素都在一个不同的列中。 我尝试了这段代码(不使用外部框架)并且它不起作用,元素在同一列中: 输出是:
first0first1first2
second0second1second2
third0third1third2

    BufferedWriter br = new BufferedWriter(new FileWriter("C:/Users/example.csv"));
    StringBuilder sb = new StringBuilder();
    for (int i=0; i < id.length; i++) {
        sb.append(id[i] + "\t");    
        sb.append(wec[i] + "\t");
        sb.append("\n");    

    }

    br.write(sb.toString());
    br.close();
}

我也试过这里的例子: example1,但没有任何工作......这里的输出是: third0, third1 thir2,

我想要的输出是:


Colum1 Colum2 Colum3
first0 first1 first2
second0 second1 second2
第三名第三名第三名第二名

我正在使用Java 7和Maven,因此使用外部libreries不是问题。

我希望我的所有元素都按列分隔,而不是“,”或其他符号。 这里是预期的输出: expected output

2 个答案:

答案 0 :(得分:1)

使用此代码:

StringBuilder sb = new StringBuilder();
for (int i = 0; i < 5; i++) {
    sb.append("test0\t");
    sb.append("test1\t");
    sb.append("test2\n");
}
System.out.println(sb.toString());

我得到了输出

test0   test1   test2
test0   test1   test2
test0   test1   test2
test0   test1   test2
test0   test1   test2

由于您的代码似乎是正确的,我们需要更多信息。要获得正确的csv格式,请将每个\t替换为,

答案 1 :(得分:1)

您可以尝试apache commons-csv:

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-csv -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.1</version>
</dependency>

然后csv打印变得非常简单:

PrintStream ps = new PrintStream(new FileOutputStream("C:/Users/example.csv"));    List<String> record = new ArrayList<>();
// ...
for (int i=0; i < id.length; i++) {
    record.add(id[i] + "\t");    
    record.add(wec[i] + "\t");    
}
try (CSVPrinter csvPrinter = new CSVPrinter(builder, CSVFormat.EXCEL)) {
        csvPrinter.printRecord(record);
}

这将解决csv的所有怪癖,比如在字段中包含逗号。

或者,您可以手动添加逗号:

for (int i=0; i < id.length; i++) {
    sb.append(id[i] + "\t,");  // comma after tab
    sb.append(wec[i] + "\t,"); // comma after tab
    sb.append("\n");    

}

<强>更新

Excel允许您选择分隔符,请参见下图 enter image description here