/**
* Parses a csv file into a list of beans.
*
* @param <T> the type of the bean
* @param filename the name of the csv file to parse
* @param fieldDelimiter the field delimiter
* @param beanClass the bean class to map csv records to
* @return the list of beans or an empty list there are none
* @throws FileNotFoundException if the file does not exist
*/
public static <T> List<T> parseCsvFileToBeans(final String filename,
final char fieldDelimiter,
final Class<T> beanClass) throws FileNotFoundException {
CSVReader reader = null;
try {
reader = new CSVReader(new BufferedReader(new FileReader(filename)),
fieldDelimiter);
final HeaderColumnNameMappingStrategy<T> strategy =
new HeaderColumnNameMappingStrategy<T>();
strategy.setType(beanClass);
final CsvToBean<T> csv = new CsvToBean<T>();
return csv.parse(strategy, reader);
} finally {
if (reader != null) {
try {
reader.close();
} catch (final IOException e) {
// ignore
}
}
}
}
Example:Consider the following CSV file containing person information:
FirstName,LastName,Age Joe,Bloggs,25 John,Doe,30Create the following
Person bean to bind each CSV record to:
public class Person {
private String firstName;
private String lastName;
private int age;
public Person() {
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Now, you can parse the CSV file into a list of Person beans with this one-liner:
List<Person> persons = Utils.parseCsvFileToBeans("/path/to/persons.csv",
',', Person.class);