2014-03-02 3 views
0

입력이 단일 파일에 90k와 데이터 행을 가질 수있는 csv 파일 데이터 인 소프트웨어를 만드는 중입니다.SuperCSV 및 Dozer

그냥 파일에 HEADER 행이 전혀 없다는 것을 알리기 위해 데이터 자체부터 시작합니다.

Google 검색을 통해 나는 CSV 및 도저 매퍼 확장자를 보게되었습니다. 나는 하나의 csv 라인을 읽는 동안 Pojo를 다른 pojos 컬렉션으로 채울 수있는 예를 찾을 수 없다.

내 고객 뽀조 스냅 샷 아래에 보이는

... 몇 가지 지침을 줄 수

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 
} 

, 나도 사이트를 통해 읽고 있어요하지만 하루 소프트웨어에 하루로 여러 협회와 사용자가 간단한 예제를 가지고 데이터 유형.

Thanks in advance. 

답변

1

없음 헤더는 잘하지 않습니다 - 단지 슈퍼 CSV 구성이 명시 적으로 CSV의 구조를 정의해야합니다으로 (즉 하드 코딩) 정적된다는 점에 유의. 파일의 첫 번째 줄은 헤더가 아니라 데이터이므로 beanReader.getHeader()으로 전화하지 않아도됩니다.

각 고객이 CSV 파일에서 1 행에 매핑하는 경우 웹 사이트의 examples과 동일한 방식으로 Super 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 

과 같이 보일 수 있습니다 (당신의 POJO 기반으로) 여러분의 빈 매핑 :

new String[]{"customerId", "addressList[0].street", "addressList[0].city", 
    "addressList[1].street", "addressList[1].city", 
    "vehicleInfoPojoList[0].rego", "vehicleInfoPojoList[1].rego"} 

도저 인스턴스화 할 필요 VehicleInfo 및 주소 클래스뿐만 아니라 목록. 제 2 차량 레고가없는 경우, 도저는 차량 목록의 두 번째 요소를 채우지 않아야합니다.

당신은 알 수 있습니다 각 고객이 여러 걸쳐있는 경우 단일 행에 각 고객의지도는 다음 색인을 사용 할 수 매핑은 항상 주소/차량 등


의 고정 번호를 가지고 있기 때문에 때문에 행을 선택하면 쉽지 않습니다.

그런 경우 각 행/고객을 읽는 것이 좋습니다. 동일한 고객 (예 : customerId)을 발견하면 기존 고객에게 새 주소/차량 등을 복사하십시오.

또는 자신의 셀 프로세서 (here 완료)를 작성하거나 Dozer의 iterate-method 기능이 도움이되는지 확인할 수 있습니다.

+0

나는 같은 방식으로 해왔고 작동하기 시작했다. 맞춤 어댑터를 작성해야한다. 내 코드는 항상 2 행에서만 읽습니다. ICsvDozerBeanReader beanReader = null; beanReader = new CsvDozerBeanReader (새 FileReader ("Test3.csv"), CsvPreference.STANDARD_PREFERENCE); beanReader.getHeader (true); // 헤더를 무시합니다. beanReader.configureBeanMapping (InsCsv.class, FIELD_MAPPING); InsuCsv surveyResponse; while ((surveyResponse = beanReader.read (InsuCsv.class, processors))! = null) { System.out.println (surveyResponse);}} – user1750909

+0

그것을 얻었습니다. 나는 안된다. --beanReader.getHeader (true); 내 CSV 파일에 헤더가 없습니다. – user1750909

+0

correct :) 이것을 반영하기 위해 내 대답을 업데이트했습니다. –