如何基于CSV文件创建新的类实例

时间:2014-12-09 20:28:40

标签: java class csv instantiation

我们说我有一个班级,Car,我试图导入大量数据来创建" Car"的多个实例。

我的CSV文件布局如下:

汽车制造商,型号,颜色,所有者,MPG,车牌,原产国,VIN,等等

关键是,构造函数中需要有很多数据。如果只有其中的一小部分,那么通过编写Car FordFocus = new Car(Ford,Focus,Blue,John Doe,108-J1AZ,USA,194241-12e1...)来手动实例化它并不是那么糟糕,但如果我有数百个,那么有没有办法导入所有这些数据制作课程?

3 个答案:

答案 0 :(得分:1)

George所述,您需要一个工具。我之前使用opencsv来实现这一目标。

opencsv为您提供了三种映射策略(可以进一步扩展),用于将CSV行映射到bean。最简单的是ColumnPositionMappingStrategy。因此,如果您的CSV格式是固定的,例如标题行看起来像:

汽车制造商,型号,颜色,所有者,MPG,车牌,原产国,VIN,等等

此代码段可以帮助您。我还使用了HeaderColumnNameTranslateMappingStrategy,它允许您将CSV标题名称映射到bean字段名称,例如“汽车制造商” - > carManufacturer。

  CSVReader csvReader = new CSVReader(new FileReader(csvFile));
  ColumnPositionMappingStrategy<Car> strategy = new ColumnPositionMappingStrategy<Car>();
  strategy.setType(Car.class);
  String[] columns = new String[] {"CarManufacturer","Model","Color","Owner","MPG","LicensePlate","CountryOfOrigin","VIN"}; // the fields to bind do in your JavaBean
  strategy.setColumnMapping(columns);

  CsvToBean<Car> csv = new CsvToBean<Car>();
  List<Car> list = csv.parse(strategy, csvReader);

可以找到自包含的示例程序here

答案 1 :(得分:0)

反思是可能的。 您可以将属性与CSV文件中的位置(列)相关联。

例如,请参阅使用反射设置属性的示例:https://docs.oracle.com/javase/tutorial/reflect/member/fieldValues.html

答案 2 :(得分:0)

您可以逐行读取csv文件,并可以通过循环中的构造函数创建Car对象。