2017-04-04 48 views
1

我有我的csv這個問題,我有一個字符串值的數組,我想把它放在一個csv文件,但我也希望每個元素都在一個不同的列。 我試試這個代碼(不使用外部框架)和它不工作,該元素在同一個科拉姆: 輸出:
first0first1first2
second0second1second2
third0third1third2csv java上的列的單獨元素

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秒2
third0 third1 third2

我使用的Java 7和Maven,所以這是不問題tu使用外部libreries。

我希望我的所有元素都按列分隔,而不是「,」或其他符號。 這裏預期輸出: expected output

+0

畫面** **哪裏沒有你得到沒有標籤的錯誤輸出?你想要一個由空白分隔的輸出嗎?然後用''替換'\ t'。或者你想要** C ** omma ** S ** eparated ** V ** alues作爲輸出?然後用','或';'替換'\ t'。 – IQV

回答

1

更換每\t你可以嘗試阿帕奇公地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");  

} 

UPDATE

Excel中,您可以選擇分隔符,請參見下面 enter image description here

+0

新的CSVPrinter(builder - > builder是我的StringBuilder sb嗎?它不起作用........我希望我的所有元素都不一樣列,像excel,1元素=第一行,第一列,2元素=第一行,第二列.... 你的代碼的輸出是我的元素都在1列和1行 –

+0

你用什麼工具通常你可以配置分隔字符 我已經在生產中有一些'CSVPrinter',它可以很好地工作,你能指定更準確的輸出結果嗎?不幸的是,csv有很多變種,參見[rfc](https://tools.ietf.org/html/rfc4180) –

+0

我用excel打開csv文件 因爲我很傷心,我希望每個元素都在一個不同的柱子裏! 例如,我的元素是:a,b,c,d,e。預期的輸出是:a行1列colum1,行1列b,列1行colum3,行1列d,列4,列e列1列colum5。 這樣的: https://docs.google.com/spreadsheets/d/1ZW-4oSt8BgcRc_j39eNMghIbci_FVgP-_ZgIi2aO2zU/edit?usp=sharing –

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格式,具有,

+0

隨着你的代碼,在我的CSV文件的輸出是這樣的:第一行:「test0test1test2」 第二行:「test0test1test2」等等.... –

+0

@LizLamperouge再次:**你在哪裏得到這個輸出?你在哪個編輯器或程序中打開csv文件? – IQV

+0

在我的csv文件,如果我試圖用記事本打開它,它是用Excel –