I have a CSV file with the following columns: id
, fname
, telephone
, lname
, address
.
I have a Person
class with id
, fname
and lname
data members. I want to map only these columns to Person
object from a CSV file and discard telephone
and address
columns. How can I do this? The solution must scale as more columns are added in future. And should work regardless of column position.
In an ideal solution user will only specify columns to read and it should just work.
You can use HeaderColumnNameTranslateMappingStrategy. Lets assume your CSV has the following columns: Id
, Fname
, Telephone
, Lname
, Address
for the sake of simplicity.
CsvToBean<Person> csvToBean = new CsvToBean<Person>();
Map<String, String> columnMapping = new HashMap<String, String>();
columnMapping.put("Id", "id");
columnMapping.put("Fname", "fname");
columnMapping.put("Lname", "lname");
HeaderColumnNameTranslateMappingStrategy<Person> strategy = new HeaderColumnNameTranslateMappingStrategy<Person>();
strategy.setType(Person.class);
strategy.setColumnMapping(columnMapping);
List<Person> list = null;
CSVReader reader = new CSVReader(new InputStreamReader(ClassLoader.getSystemResourceAsStream("test.csv")));
list = csvToBean.parse(strategy, reader);
The columnMapping will map the columns with your Person
object.