3

BeanIO フレームワークを使用してデータのリストを CSV に書き込もうとしています。単一のオブジェクトを CSV に書き込むことはできますが、データのリストを書き込むことはできません。

次のコードを試しました:

package com.beanio.example;

import java.util.Date;

public class Employee {
    String firstName;
    String lastName;
    String title;
    int salary;
    Date hireDate;

    // setters and getters follow ...
}
<beanio xmlns="http://www.beanio.org/2012/03" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.beanio.org/2012/03 http://www.beanio.org/2012/03/mapping.xsd">

  <stream name="employeeFile" format="csv">
  <record name="header" class="com.beanio.example.GroupH" order="1" occurs="1">
      <field name="h1" default="Header1" ignore="true" />
      <field name="h2" default="Header2" ignore="true" />
      <field name="h3" default="Header2" ignore="true" />
    </record>
    <record name="employee" class="com.beanio.example.Employee"  order="2">
      <field name="firstName" />
      <field name="lastName" />
      <field name="title" />
      <field name="salary" />
      <field name="hireDate" format="MMddyyyy" />
    </record>
  </stream>
</beanio>
public class Main {
    public static void main(String[] args) throws Exception {
        // create a StreamFactory
        StreamFactory factory = StreamFactory.newInstance();
        // load the mapping file
        factory.loadResource("mapping.xml");

        List<Employee> employees = new ArrayList<Employee>();

        Employee employee = new Employee();
        employee.setFirstName("Jennifer");
        employee.setLastName("Jones");
        employee.setTitle("Marketing");
        employee.setSalary(60000);
        employee.setHireDate(new Date());

        Employee employee1 = new Employee();
        employee1.setFirstName("JACk");
        employee1.setLastName("Jones");
        employee1.setTitle("Tele");
        employee1.setSalary(60000);
        employee1.setHireDate(new Date());

        employees.add(employee);
        employees.add(employee1);

        // use a StreamFactory to create a BeanWriter
        BeanWriter out = factory.createWriter("employeeFile", new File("employee.csv"));
        // write an Employee object directly to the BeanWriter
        out.write(employees);
        out.flush();
        out.close();
    }
}

CSV の結果が以下の形式に従うことを期待しています。

FirstName,LastName,Title,Salary,HireDate

例えば:

Jennifer,Jones,Marketing,60000,24-12-2016

JACK,Jones,TELE,60000,24-12-2016

誰か助けてくれませんか?

4

2 に答える 2

2

これを行うだけです:

for(Employee e: employees){
    out.write(e);
}

これは完全なコードです:

public class Main {
    public static void main(String[] args) throws Exception {
        // create a StreamFactory
        StreamFactory factory = StreamFactory.newInstance();
        // load the mapping file
        factory.loadResource("mapping.xml");

        List<Employee> employees = new ArrayList<Employee>();

        Employee employee = new Employee();
        employee.setFirstName("Jennifer");
        employee.setLastName("Jones");
        employee.setTitle("Marketing");
        employee.setSalary(60000);
        employee.setHireDate(new Date());

        Employee employee1 = new Employee();
        employee1.setFirstName("JACk");
        employee1.setLastName("Jones");
        employee1.setTitle("Tele");
        employee1.setSalary(60000);
        employee1.setHireDate(new Date());

        employees.add(employee);
        employees.add(employee1);

        // use a StreamFactory to create a BeanWriter
        BeanWriter out = factory.createWriter("employeeFile", new File("employee.csv"));
        // write an Employee object directly to the BeanWriter
        for(Employee e: employees){
            out.write(e);
        }
        out.flush();
        out.close();
    }
}
于 2016-05-12T23:24:48.923 に答える
0

BeanIO を使用すると、単一のオブジェクトとしてのみフラット ファイルに書き込むことができます。

一方、BeanIO との Spring バッチ統合を使用してそれを実現できます。

http://beanio.org/2.1/docs/reference/index.html#SpringItemReaderWriter

于 2016-04-28T23:31:50.790 に答える