2017-06-22 14 views
2

我有一個需求,我需要用引號字符包裝所有元素。OpenCSV CSVWriter不會爲null元素添加引號字符

我使用CSVWriter到作家的線條

CSVWriter writer = new CSVWriter(new FileWriter(rptFileName),`CSVWriter.DEFAULT_SEPARATOR, CSVWriter.DEFAULT_QUOTE_CHARACTER); 

當一個元素是一個空字符串,則它包裝的報價,如果它爲null,則它沒有廣告的引號字符。

那麼畝產量就變成這樣了。

"ABC",,"","DEF"

,我想要像

"ABC","","","DEF"

這裏第二個元素是零和第三元素是空字符串。

OpenCSV中有沒有辦法實現這一點,而無需人工干預?

回答

0

我不認爲你可以用CSVWriter在「自動」模式下做到這一點。只需在您的代碼中手動分配空值""值到null字符串。

0

當你不想手動更改的每一行,也許給univocity-parsers一去:如果你正在寫(行或列表)行

//configure writer 
CsvWriterSettings settings = new CsvWriterSettings(); 
settings.setQuoteAllFields(true); 

//create writer with given config and output file 
CsvWriter writer = new CsvWriter(new File(rptFileName), "UTF-8", settings); 

//get your data from somewhere 
List<Object[]> dataToWrite = getDataFromSomewhere(); 

//write everything. 
writer.writeRowsAndClose(dataToWrite); 

如果您從結果集傾倒數據:

ResultSet rs = getDataFromSomewhere(); 
new CsvRoutines(settings).write(rs, new File(rptFileName), "UTF-8"); 

這將做你想做的,而不需要手動改變y我們的投入。

披露:我是這個庫的作者,它是開源和免費的(Apache 2.0許可)

0

否CSVWriter是故意這樣設計使CSVReader能之間的是空的,什麼是差異一個空的字符串。後來的版本添加了CSVReaderNullFieldIndicator,以便用戶可以決定什麼是空(如果有空),但是沒有擴展到CSVWriter。所以如果你想堅持openCSV,你將不得不做一些手動干預。

如果人工干預是不可能的,你可以使用Apache Commons庫來幫助你

String[] copyArray = ArrayUtils.clone(originalValues); 
for (int i = 0; i < copyArray.size; i++) { 
    copyArray[i] = StringUtils.defaultString(copyArray[i]); 
} 

// now use the CSVWriter to write the copyArray.