2013-08-28 121 views
5

我想寫一個使用傑克遜2.2.2(特別是傑克遜數據格式csv)的CSV文件,但我不能讓它使用';'作爲fileseparator。傑克遜csv作家不使用正確的列分隔符

我使用下面的代碼初始化作家:

CsvMapper mapper = new CsvMapper(); 
CsvSchema schema = mapper.schemaFor(MyObject.class); 
schema = schema.withColumnSeparator(CSV_COLUMN_SEPARATOR); 

ObjectWriter myObjectWriter = mapper.writer(schema); 

要創建CSV我這樣做如下:

FileOutputStream tempFileOutputStream = new FileOutputStream(tempFile); 
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(tempFileOutputStream, STREAM_BUFFER_SIZE); 
writerOutputStream = new OutputStreamWriter(bufferedOutputStream, FILE_ENCODING); 

myObjectWriter.writeValue(writerOutputStream, listOfMyObjects); 

但是生成的文件仍然使用默認的' ,'作爲列分隔符。當我用調試器檢查對象';'在對象中設置爲分隔符,所以我想它應該工作。有誰知道我在做什麼錯或者這是一個錯誤?

+2

沒關係我一直在網上尋找答案,發現這個功能在2.2.2版本中不起作用它從2.2.3版本開始工作,它是在4天前發佈的,但在maven版本庫中不可用然而。 – Ozzie

+1

現在應該已經有幾天了:http://repo1.maven.org/maven2/com/fasterxml/jackson/dataformat/jackson-dataformat-csv/2.2.3/ – StaxMan

回答

2

如果你想要一個替代方案,使用Open CSVCSVWriter

public CSVWriter(Writer writer, char separator) 
+0

是的,我知道。我更喜歡OpenCSV,但同事已經與傑克遜建立了功能,所以我會保持這種方式。 – Ozzie

1

所有你需要做的是檢索方法的輸出withColumnSeparator(對於2.9.3版本):

schema = schema.withColumnSeparator(';'); 
mapper.writer(schema).writeValue(file, objectList); 

這應該讓你使用你想要的分隔符。