每行写入多个对象到csv 1

时间:2014-10-15 09:53:12

标签: java csv serialization jackson

我试图将对象序列化为多行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提供了一种将不同对象序列化到同一文件的方法,所以我必须要有一些东西丢失。

0 个答案:

没有答案