Java 超级SV和推土机
我正在构建一个软件,其中输入的是csv文件数据,在单个文件中可以有90k以上的数据行 只是为了通知文件根本没有标题行,它将从数据本身开始 通过谷歌搜索,我找到了超级csv和推土机地图扩展。我找不到一个例子,说明当读取单个csv行时,Pojo中可以填充许多其他Pojo集合 我的客户Pojo看起来像下面的快照Java 超级SV和推土机,java,supercsv,Java,Supercsv,我正在构建一个软件,其中输入的是csv文件数据,在单个文件中可以有90k以上的数据行 只是为了通知文件根本没有标题行,它将从数据本身开始 通过谷歌搜索,我找到了超级csv和推土机地图扩展。我找不到一个例子,说明当读取单个csv行时,Pojo中可以填充许多其他Pojo集合 我的客户Pojo看起来像下面的快照 class CustomerPojo { private Id<CustomerId> customerId; private String lookupCod
class CustomerPojo {
private Id<CustomerId> customerId;
private String lookupCode;
// enum type
private QuoteType quoteType;
private String bCovCa;
private Money bCovRa;
private String recommCovCa;
private Money recommCoveRa;
private Date insertedDate;
private String pdfName;
private List<VehicleInfo> vehicleInfoPojoList;
private List<Address> addressList;
// All setter-getter
}
没有标题是好的-请注意超级CSV配置将是静态的(即硬编码),因为您必须明确定义CSV的结构。请注意,您不需要调用
beanReader.getHeader()
,因为文件的第一行是数据,而不是头
如果每个客户都映射到CSV文件中的一行,那么您应该能够以与网站中相同的方式配置超级CSV
例如,如果您的CSV如下所示:
1,1 First St,London,1 First Rd,New York,111AAA,111BBB
2,2 Second St,Paris,2 Second Rd,Munich,222AAA,222BBB
您的bean映射(基于POJO)可能类似于:
new String[]{"customerId", "addressList[0].street", "addressList[0].city",
"addressList[1].street", "addressList[1].city",
"vehicleInfoPojoList[0].rego", "vehicleInfoPojoList[1].rego"}
推土机将实例化必要的车辆信息和地址类以及列表。如果没有第二个车辆注册表,则推土机不应填充车辆列表中的第二个元素
您会注意到,因为每个客户都映射到一行,所以您可以使用索引映射,因为您将始终拥有固定数量的地址/车辆等
如果每个客户跨越多行,那么就不那么容易了 在这种情况下,我可能建议阅读每一行/客户,如果您找到相同的客户(即customerId),则将新地址/车辆等复制到现有客户
或者,您可以编写自己的cell处理器(完成时),或者看看Dozer的功能是否有帮助。是的,我已经用同样的方法编写了,并且它开始工作,我需要编写自定义适配器。我的代码总是只从第2行读取。ICsvDozerBeanReader beanReader=null;beanReader=newCSVDozerBeanReader(newFileReader(“Test3.csv”),CsvPreference.STANDARD_首选项);beanReader.getHeader(true);//忽略标题beanReader.configureBeanMapping(InsCsv.class,字段_MAPPING);INUSCSV调查响应;而((surveyResponse=beanReader.read(insucv.class,processors))!=null){System.out.println(surveyResponse);}}得到了它。我不应该这样做——beanReader.getHeader(true);因为我的csv文件中没有标题。
new String[]{"customerId", "addressList[0].street", "addressList[0].city",
"addressList[1].street", "addressList[1].city",
"vehicleInfoPojoList[0].rego", "vehicleInfoPojoList[1].rego"}