0

我正在尝试使用 BeanIO 将一些内容从一个 csv 文件写入另一个 csv 文件。我能够获取内容,但标头未写入目标文件。我不知道如何解决这个问题。请有人帮我解决这个问题。以下是代码

StreamFactory factory = StreamFactory.newInstance();
    factory.load("config" + File.separatorChar
            + CSVMain.prop.getProperty("ordersmapping"));

    orderWriter = factory.createWriter("salesOrder", new File(property));

    for (int i = 0; i < orders.size(); i++) {

        orderWriter.write(orders.get(i));

    }

    orderWriter.flush();
    orderWriter.close();

代码写在方法中。而且我还想从输出中删除回车符(\r)。提前致谢。

4

2 回答 2

1

我从 Google Groups 线程中得到了答案,该线程使用一个类作为标题,然后将字段设置为忽略,基本上是覆盖。我不想创建一个专门的类,所以我重用了这个map类,如下所示:

<stream name="XYZ" format="csv">
    <parser>
        <property name="alwaysQuote" value="true" />
    </parser>
    <record name="header" class="map" order="1" minOccurs="1" maxOccurs="1">
        <field name="Name"    default="Name"    ignore="true"/>
        <field name="Surname"       default="Surname"       ignore="
    </record>
    <record name="record" class="map" order="2">
        <field name="Name"/>
        <field name="Surname"/>
    </record>
</stream>
于 2017-02-03T05:41:16.077 回答
0

您可以使用此 util 方法轻松创建 Header,而无需任何额外的类或 XML 配置。

public static void main(String[] args) {

    final String factoryName = "comma delimited csv factory";
    final String headerName = "CarHeader";

    final var builder = new StreamBuilder(factoryName)
        .format("csv")
        .addRecord(Headers.of(Car.class, headerName))
        .addRecord(Car.class)
        ;

    final var factory = StreamFactory.newInstance();
    factory.define(builder);

    final ByteArrayOutputStream bout = new ByteArrayOutputStream();
    final BeanWriter writer = factory.createWriter(factoryName, new OutputStreamWriter(bout));
    try {
      writer.write(headerName, null);
      writer.write(new Car("Ford Ka", 2016));
      writer.write(new Car("Ford Fusion", 2020));
    } finally {
      writer.close();
    }

    System.out.println(bout.toString());
//    Model,Year
//    Ford Ka,2016
//    Ford Fusion,2020
  }
于 2021-04-04T19:31:08.997 回答