Написание содержимого с заголовком с использованием BeanIO

Я пытаюсь записать некоторое содержимое из одного CSV-файла в другой CSV-файл, используя BeanIO. Я могу получить содержимое, но заголовок не записывается в файл назначения. Я не знаю, как это исправить. Пожалуйста, помогите мне в этом. Ниже приведен код

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) из вывода. Заранее спасибо.


person user3632475    schedule 13.03.2015    source источник


Ответы (2)


Я получил ответ из потока 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>
person Mark Ashworth    schedule 03.02.2017

Вы можете использовать этот вспомогательный метод, чтобы легко создать заголовок без какого-либо дополнительного класса или конфигурации 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
  }
person deFreitas    schedule 04.04.2021