我试图将对象序列化为多行csv文件。 现在,它不是每行1,而是全部写入1行。
这是我的代码。
PurchaseOrder po = new PurchaseOrder(entry);
ArrayList<Object> l = Lists.newArrayList();
l.add(po);
l.add(new PurchaseOrder(entry));
CsvMapper mapper = new CsvMapper();
CsvSchema schema = mapper.schemaFor(PurchaseOrder.class);
schema = schema.withColumnSeparator(',');
ObjectWriter writer = mapper.writer(schema);
File tempFile = new File("test.csv");
FileOutputStream tempFileOutputStream = new FileOutputStream(tempFile);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(tempFileOutputStream, 1024);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(bufferedOutputStream, "UTF-8");
for(Object o : l) {
writer.writeValue(outputStreamWriter, o);
}
ArrayList的原因是最终结果需要是通用的,因为ArrayList需要能够包含ant类型的对象。
这是最终有效的解决方案。传递列表就是这样做的方式
PurchaseOrder po = new PurchaseOrder(entry);
ArrayList<Object> l = Lists.newArrayList();
l.add(po);
l.add(new PurchaseOrder(entry));
CsvMapper mapper = new CsvMapper();
CsvSchema schema = mapper.schemaFor(PurchaseOrder.class);
schema = schema.withColumnSeparator(',');
ObjectWriter writer = mapper.writer(schema);
File tempFile = new File("test.csv");
FileOutputStream tempFileOutputStream = new FileOutputStream(tempFile);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(tempFileOutputStream, 1024);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(bufferedOutputStream, "UTF-8");
writer.writeValue(outputStreamWriter, l);
-------新问题------- 如果它是相同的物体,上述溶液可以起作用。现在作为它的两个不同的对象,每个对象都需要自己的行,模式必须改变,证明比我想象的更麻烦。
这是我现在尝试的没有任何成功。
ArrayList<Object> l = Lists.newArrayList();
l.add(new PurchaseOrderE(entry));
l.add(new PurchaseOrderL(entry));
CsvMapper mapper = new CsvMapper();
//CsvSchema schema = mapper.schemaFor(PurchaseOrderE.class);
//schema = schema.withColumnSeparator(',');
//schema = schema.withLineSeparator("");
//ObjectWriter writer = mapper.writer(schema);
File tempFile = new File("test.csv");
//FileOutputStream tempFileOutputStream = new FileOutputStream(tempFile);
//BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(tempFileOutputStream, 1024);
//OutputStreamWriter outputStreamWriter = new OutputStreamWriter(bufferedOutputStream, "UTF-8");
//for(Object o : l) {
//CsvSchema schema = mapper.schemaFor(o.getClass());
//schema = schema.withColumnSeparator(',');
//schema = schema.withLineSeparator("");
ObjectWriter writer = mapper.writer();
FileOutputStream tempFileOutputStream = new FileOutputStream(tempFile);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(tempFileOutputStream, 1024);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(bufferedOutputStream, "UTF-8");
writer.writeValue(outputStreamWriter, l);
//}
我所尝试过的作品是没有成功的。因为我认为这个优秀的lib提供了一种将不同对象序列化到同一文件的方法,所以我必须要有一些东西丢失。