Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 超级SV和推土机_Java_Supercsv - Fatal编程技术网

Java 超级SV和推土机

Java 超级SV和推土机,java,supercsv,Java,Supercsv,我正在构建一个软件,其中输入的是csv文件数据,在单个文件中可以有90k以上的数据行 只是为了通知文件根本没有标题行,它将从数据本身开始 通过谷歌搜索,我找到了超级csv和推土机地图扩展。我找不到一个例子,说明当读取单个csv行时,Pojo中可以填充许多其他Pojo集合 我的客户Pojo看起来像下面的快照 class CustomerPojo { private Id<CustomerId> customerId; private String lookupCod

我正在构建一个软件,其中输入的是csv文件数据,在单个文件中可以有90k以上的数据行

只是为了通知文件根本没有标题行,它将从数据本身开始

通过谷歌搜索,我找到了超级csv和推土机地图扩展。我找不到一个例子,说明当读取单个csv行时,Pojo中可以填充许多其他Pojo集合

我的客户Pojo看起来像下面的快照

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"}