CSV 파일을 읽고 (및 쓰기) Java 라이브러리를 추천 할 수 있습니까? [닫은

StackOverflow https://stackoverflow.com/questions/200609

  •  03-07-2019
  •  | 
  •  

문제

CSV (Comma value 개체) 파일 (java value 객체)에 대한 판독, 구문 분석, 검증 및 매핑을위한 Java 라이브러리를 추천 할 수 있습니까?

도움이 되었습니까?

해결책

우리는 사용했습니다http://opencsv.sourceforge.net/좋은 성공으로

또한 좋은 링크와 함께 또 다른 질문을 발견했습니다.CSV를 XML 파일로 변환하려는 Java Lib 또는 앱?

다른 팁

슈퍼 CSV CSV 파일을 Pojos에 읽고, 구문 분석하고, 검증하고, 매핑하는 데 좋은 선택입니다!

우리 (Super CSV 팀)는 방금 새 버전을 출시했습니다 ( 다운로드 Sourceforge 또는 Maven에서).

CSV 파일을 읽습니다

다음 예제가 사용됩니다 CsvDozerBeanReader (방금 릴리스 한 새로운 독자 도저 깊은 매핑 및 인덱스 기반 매핑 지원을 사용한 Bean 매핑의 경우) - 그것은 우리의 예제를 기반으로합니다. 웹 사이트. 도저 기능이 필요하지 않은 경우 (또는 간단한 독립형 종속성을 원하면) 사용할 수 있습니다. CsvBeanReader 대신 (이것을 참조하십시오 코드 예제).

예제 CSV 파일

다음은 설문 조사에 대한 응답을 나타내는 예제 CSV 파일입니다. 헤더와 3 행의 데이터가 있으며 모두 8 개의 열이 있습니다.

age,consentGiven,questionNo1,answer1,questionNo2,answer2,questionNo3,answer3
18,Y,1,Twelve,2,Albert Einstein,3,Big Bang Theory
,Y,1,Thirteen,2,Nikola Tesla,3,Stargate
42,N,1,,2,Carl Sagan,3,Star Wars

CSV에서 Pojo 로의 매핑 정의

CSV의 각 행은 a로 읽습니다 감시 대응 클래스는 각각 목록이 있습니다 대답에스. 매핑이 작동하려면 클래스가 유효한 javabeans 여야합니다 (즉, 기본값 No-Arg 생성자가 있고 각 필드에 대해 Getters/Setter가 정의되어 있음).

Super CSV에서는 간단한 문자열 배열로 매핑을 정의합니다. 배열의 각 요소는 CSV 파일의 열에 해당합니다.

와 함께 CsvDozerBeanMapper 당신이 사용할 수있는:

  • 간단한 필드 매핑 (예 : firstName)

  • 깊은 매핑 (예 : address.country.code)

  • 인덱스 매핑 (예 : middleNames[1] - 배열 또는 컬렉션에 대한 제로 기반 인덱스)

  • Deep + indexed 매핑 (예 : person.middleNames[1])

다음은이 예제의 필드 매핑입니다. 다음의 조합을 사용합니다.

private static final String[] FIELD_MAPPING = new String[] { 
        "age",                   // simple field mapping (like for CsvBeanReader)
        "consentGiven",          // as above
        "answers[0].questionNo", // indexed (first element) + deep mapping
        "answers[0].answer", 
        "answers[1].questionNo", // indexed (second element) + deep mapping
        "answers[1].answer", 
        "answers[2].questionNo", 
        "answers[2].answer" };

변환 및 검증

Super CSV에는 유용한 라이브러리가 있습니다 셀 프로세서, CSV 파일에서 다른 데이터 유형 (예 : 날짜, 정수)으로 문자열을 변환하는 데 사용할 수 있습니다.

셀 프로세서를 사용합니다 전적으로 선택 사항 - 그들없이 CSV의 각 열은 문자열이되므로 각 필드는 문자열이어야합니다.

다음은 예제의 셀 프로세서 구성입니다. 필드 매핑과 마찬가지로 배열의 각 요소는 CSV 열을 나타냅니다. 셀 프로세서가 CSV 데이터를 필드의 데이터 유형으로 변환하는 방법과 이들이 함께 연결되는 방법을 보여줍니다.

final CellProcessor[] processors = new CellProcessor[] { 
    new Optional(new ParseInt()), // age
    new ParseBool(),              // consent
    new ParseInt(),               // questionNo 1
    new Optional(),               // answer 1
    new ParseInt(),               // questionNo 2
    new Optional(),               // answer 2
    new ParseInt(),               // questionNo 3
    new Optional()                // answer 3
};

독서

Super CSV로 읽는 것은 매우 유연합니다. Reader (따라서 파일, 클래스 경로, zip 파일 등을 읽을 수 있으며 구분 기 및 견적 문자는 선호도 (대부분의 사용법을 수용하는 사전 정의 된 구성이 많이 있습니다).

아래 코드는 꽤 자명합니다.

  1. 독자를 만듭니다 (당신과 함께 Reader 및 선호도)

  2. (선택적으로) 헤더를 읽으십시오

  3. Bean 매핑을 구성하십시오

  4. 계속 전화하십시오 read() 당신이 얻을 때까지 null (파일 끝)

  5. 독자를 닫으십시오

암호:

ICsvDozerBeanReader beanReader = null;
try {
    beanReader = new CsvDozerBeanReader(new FileReader(CSV_FILENAME),
        CsvPreference.STANDARD_PREFERENCE);

    beanReader.getHeader(true); // ignore the header
    beanReader.configureBeanMapping(SurveyResponse.class, FIELD_MAPPING);

    SurveyResponse surveyResponse;
    while( (surveyResponse = 
        beanReader.read(SurveyResponse.class, processors)) != null ) {
        System.out.println(
            String.format("lineNo=%s, rowNo=%s, surveyResponse=%s",
                beanReader.getLineNumber(), beanReader.getRowNumber(), 
                surveyResponse));
    }

} finally {
    if( beanReader != null ) {
        beanReader.close();
    }
}

산출:

lineNo=2, rowNo=2, surveyResponse=SurveyResponse [age=18, consentGiven=true, answers=[Answer [questionNo=1, answer=Twelve], Answer [questionNo=2, answer=Albert Einstein], Answer [questionNo=3, answer=Big Bang Theory]]]
lineNo=3, rowNo=3, surveyResponse=SurveyResponse [age=null, consentGiven=true, answers=[Answer [questionNo=1, answer=Thirteen], Answer [questionNo=2, answer=Nikola Tesla], Answer [questionNo=3, answer=Stargate]]]
lineNo=4, rowNo=4, surveyResponse=SurveyResponse [age=42, consentGiven=false, answers=[Answer [questionNo=1, answer=null], Answer [questionNo=2, answer=Carl Sagan], Answer [questionNo=3, answer=Star Wars]]]

추가 정보

당신은 더 많은 정보를 찾을 수 있습니다 웹 사이트!

추천 할 수 있습니다 SuperCSV. 사용하기 쉽고 필요한 모든 것을했습니다.

이봐, 나는 그것을위한 오픈 소스 프로젝트가있다 : jfilehelpers. 주요 장점은 Java 주석을 사용한다는 것입니다.

이 콩이있는 경우 :

@FixedLengthRecord()
public class Customer {
    @FieldFixedLength(4)
    public Integer custId;

    @FieldAlign(alignMode=AlignMode.Right)
    @FieldFixedLength(20)
    public String name;

    @FieldFixedLength(3)
    public Integer rating;

    @FieldTrim(trimMode=TrimMode.Right)
    @FieldFixedLength(10)
    @FieldConverter(converter = ConverterKind.Date, 
    format = "dd-MM-yyyy")
    public Date addedDate;

    @FieldFixedLength(3)
    @FieldOptional
    public String stockSimbol;    
}

이 파일을 구문 분석하고 싶습니다.

....|....1....|....2....|....3....|....4                
1   Antonio Pereira     10012-12-1978ABC
2   Felipe Coury          201-01-2007
3   Anderson Polga       4212-11-2007DEF      

당신이해야 할 일은 이것입니다.

FileHelperEngine<Customer> engine = 
    new FileHelperEngine<Customer>(Customer.class); 
List<Customer> customers = 
    new ArrayList<Customer>();

customers = engine.readResource(
    "/samples/customers-fixed.txt");

또한 마스터-디테일, 날짜 및 형식 변환 등을 지원합니다. 당신이 무슨 생각을하는지 제게 알려주세요!

친애하는!

나는 찾았다 플랫 팩 기발한 CSV 파일을 처리하는 데 정말 좋습니다 (탈출, 따옴표, 나쁜 레코드 등).

XML 질문에 대한 CSV 파일은 이전에 내 모든 질문에 대답하는 것 같습니다.

OpenCSV (http://opencsv.sourceforge.net/) 또한 열 위치 매핑 전략을 사용하여 Javabean에 결합합니다.

  ColumnPositionMappingStrategy strat = new ColumnPositionMappingStrategy();
  strat.setType(YourOrderBean.class);
  String[] columns = new String[] {"name", "orderNumber", "id"}; // the fields to bind do in your JavaBean
  strat.setColumnMapping(columns);

  CsvToBean csv = new CsvToBean();
  List list = csv.parse(strat, yourReader);

JSEFA (http://jsefa.sourceforge.net) 또한 내가 필요한 모든 것을 수행하는 것 같습니다 - 특히 Java 객체와의 구속력 - FLR 및 XML을 지원하는 것 외에도

나는 Java에서 CSV 파일을 구문 분석하고 작성하는 성공을 거두었습니다. Opencsv. Java와 함께 Excel 호환 스프레드 시트를 읽거나 쓰려면 포이 Apache의 도서관은 갈 길입니다.

보다 CVSBEANS

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top