Step 1: The sample CSV file to convert to an object of type Person. The first record is a header record, and the subsequent ones are detail records. The file is person.csv under src/main/resources/data
H, 2013-03-12
John,Smith, FAMILY
Peter,Smith, FAMILY
Gregory,Smith, FAMILY
Step 2: Define the dependency jar in pom.xml file.
<!-- beanio -->
<dependency>
<groupId>org.beanio</groupId>
<artifactId>beanio</artifactId>
<version>2.0.2</version>
</dependency>
Step 3:The main class that wires up everything.
package com.mycompany.app10;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.beanio.BeanReader;
import org.beanio.StreamFactory;
public class BeanIoMain
{
public void readCSVFileUsingBeanIo()
{
StreamFactory factory = StreamFactory.newInstance();
factory.loadResource("person.xml");
//read it from the classpath : src/main/resources
InputStream in = this.getClass().getResourceAsStream("/data/persons.csv");
BeanReader reader = factory.createReader("persons", new InputStreamReader(in));
Object record = null;
List<Person> persons = new ArrayList<Person>();
// read records from "input.csv"
while ((record = reader.read()) != null)
{
if ("header".equals(reader.getRecordName()))
{
@SuppressWarnings("unchecked")
Map<String, Object> header = (Map<String, Object>) record;
System.out.println(header.get("fileDate"));
}
else if ("detail".equals(reader.getRecordName()))
{
Person person = (Person) record;
persons.add(person);
}
}
System.out.println(persons);
}
public static void main(String[] args)
{
new BeanIoMain().readCSVFileUsingBeanIo();
}
}
Step 3: The POJO Person class.
package com.mycompany.app10;
public class Person
{
private String firstName;
private String surname;
private PersonType type;
public String getFirstName()
{
return firstName;
}
public void setFirstName(String firstName)
{
this.firstName = firstName;
}
public String getSurname()
{
return surname;
}
public void setSurname(String surname)
{
this.surname = surname;
}
public PersonType getType()
{
return type;
}
public void setType(PersonType type)
{
this.type = type;
}
@Override
public String toString()
{
return "Person [firstName=" + firstName + ", surname=" + surname + ", type=" + type + "]";
}
}
Step 4: The person.xml under src/main/resources where you can map to your POJO Person.java.
<beanio xmlns="http://www.beanio.org/2012/03">
<stream name="persons" format="csv">
<parser>
<property name="delimiter" value="," />
<property name="lineSeparator" value="
" />
<property name="whitespaceAllowed" value="true" />
</parser>
<typeHandler name="personTypeHandler" class="com.mycompany.app10.PersonTypeHandler"/>
<record name="header" class="map" maxOccurs="1">
<!-- rid indicates this field is used to identify the record -->
<field name="recordType" rid="true" literal="H" />
<!-- format can be used to provide Date and Number formats -->
<field name="fileDate" type="date" format="yyyy-MM-dd" />
</record>
<record name="detail" minOccurs="0" maxOccurs="unbounded"
class="com.mycompany.app10.Person">
<field name="firstName" />
<field name="surname" />
<field name="type" typeHandler="personTypeHandler" type="com.mycompany.app10.PersonType" />
</record>
</stream>
</beanio>
Step 5: Next, the handler class that parses Enums to String.
package com.mycompany.app10;
import org.beanio.types.TypeConversionException;
import org.beanio.types.TypeHandler;
public class PersonTypeHandler implements TypeHandler
{
public Object parse(String text) throws TypeConversionException
{
PersonType personType = PersonType.valueOf(text.trim());
return personType;
}
public String format(Object value)
{
return value != null ? ((PersonType) value).name() : PersonType.SINGLE.name();
}
public Class<?> getType()
{
return PersonType.class;
}
}
Step 6: The output of the BeanIoMain is:
Tue Mar 12 00:00:00 EST 2013
[Person [firstName=John, surname=Smith, type=FAMILY], Person [firstName=Peter, surname=Smith, type=FAMILY], Person [firstName=Gregory, surname=Smith, type=FAMILY]]
0 komentar:
Posting Komentar