2016-12-06 82 views
0

我需要創建一個特定格式的CSV文件。這是格式。在Java中創建CSV文件

「ROWHEAD」,2016/09/13 03:24:42 -0700,」A」,」BCDE」,002, 
「SECHEAD」,2016/09/12 00:00:00 -0700,2016/09/12 23:59:59 -0700,」BCDE」 

「COLHEAD」,」Col A」,」Col B」,」Col C」,」Col D」,」Col E」,」Col F」 
「SECBODY」,」val A」,」val B」,」val C」,」val D」,」val E」,」val F」 
「SECBODY」,」val A」,」val B」,」val C」,」val D」,」val E」,」val F」 
「SECBODY」,」val A」,」val B」,」val C」,」val D」,」val E」,」val F」 
「SECBODY」,」val A」,」val B」,」val C」,」val D」,」val E」,」val F」 

「SECFOOT」,」XXX」,0,0,0,0,」YY」,0,」ZZ」,0,189 
「SECCOUNT」,1 
"ROWFOOT」,」XXX」,0,0,0,0,」YY」,0,」ZZ」,0,189 

我試過使用正常的文件編寫器的方式,不能幫助我實現這一點。此外,我嘗試openCSV API的相同甚至沒有多大幫助。

如何創建一個CSV文件,其中包含與其關聯的頁眉和頁腳值?

+1

使用Java遇到了什麼確切的問題?你的代碼有特定的問題嗎? –

+0

使用csvwriter類來做到這一點。 (opencsv) –

+0

@Tim - 我可以把CSV文件寫成普通的FileWriter,如果記錄變大,很難處理它。使用OpenCSV,但它將所有內容寫成字符串,但我也有日期格式。 – i2ijeya

回答

2

獲取uniVocity-parsers來解決這個問題。它有一個OutputValueSwitch,它將匹配每行的特定列中的值以確定要使用的RowProcessor

例如,如果你輸入行從Java豆(它有可能如此),以及其他一些行生成的對象數組的普通列表:

OutputValueSwitch writerSwitch = new OutputValueSwitch(0); //row identifiers go at column 0 

    // If the value is "ROWHEAD", we want to use an BeanWriterProcessor. You can provide field names to be associated with the fields in the class. 
    writerSwitch.addSwitchForValue("ROWHEAD", new BeanWriterProcessor(RowHead.class)); 

    writerSwitch.addSwitchForValue("SECHEAD", new BeanWriterProcessor(SecHead.class)); 

    // If the value is "SECBODY", a ObjectRowWriterProcessor will be used. Let's assume you are writing object arrays here 
    writerSwitch.addSwitchForValue("SECBODY", new ObjectRowWriterProcessor()); 
    //...and so on. 

    //Configure the CSV writer here 
    CsvWriterSettings settings = new CsvWriterSettings(); 
    // the writer should use the switch defined above 
    settings.setRowWriterProcessor(writerSwitch); 

    settings.getFormat().setLineSeparator("\n"); 
    settings.setHeaderWritingEnabled(false); 
    //etc 

    //Create the CSV writer 
    CsvWriter writer = new CsvWriter(new File("/path/to/your.csv"), "UTF-8", settings); 

    writer.processRecord(new RowHead()); //writing bean 
    writer.processRecord(new SecHead()); //writing the other bean 
    writer.processRecord(new Object[]{"SECBODY", "Value 1", "Value 2", "etc"}); //writing an array 

    writer.close(); 

您還可以使用地圖作爲輸入行。有關完整的示例,請參閱thisthis

您可以使用此庫進行任何操作,我希望它能幫助您。

披露:我是該圖書館的作者。它是開放源代碼和免費的(Apache V2.0許可證)。

+0

謝謝@Jeronimo。我會試試這個。希望這能滿足我的需求。 – i2ijeya