2013-08-28 122 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); 

这应该让你使用你想要的分隔符。