2013-01-14 6 views
1

데이터가 위치 기반 형식으로 저장되는 플랫 파일이 있습니다. 예를 들어. 1 5 내지 - 일부 값이 저장되어있는 Y 14 18 내지 - - 일부 X 값은 6 13에서, 저장된 일부 Z 값이 저장되어있는 등등 .. 파일을 구문 분석하고 그 값을 가져 와서 빈을 채울 필요가있다.Java에서 플랫 파일 구문 분석

누군가가 나에게 그것에 대해 갈 수있는 가장 좋은 방법을 알려 주시기 바랍니다 수 있습니까

+3

정확히 어떤 단계에 집착하고 있습니까? 예를 들어 파일을 사용하여 줄 단위로 파일을 읽습니다. 'BufferedReader # readLine()'을 호출하거나 예를 들어 라인을 부분 문자열로 처리합니다. 'String # substring()'? 그것은 꽤 간단한 방법이지만. 그것들은 이미 Oracle의 기본 Java 자습서에서 언급되었습니다. – BalusC

+2

먼저 뭔가를 직접 시도한 다음 문제가 발생하면 좀 더 구체적인 질문을해야합니다. –

+0

['java.util.Scanner'] (http://docs.oracle.com/javase/6/docs/api/java/util/Scanner.html)를 사용하여 플랫 파일의 모든 행을 읽을 수 있습니다. 파이프 (|) 또는 쉼표 (,)와 같이 데이터를 구분하는 패턴이 있으면 ['String # split'] (http://docs.oracle.com/javase/6/docs/api)를 사용할 수 있습니다. /java/lang/String.html#split%28java.lang.String%29)를 사용하여 데이터를 분리하고 배포하십시오. 그렇지 않은 경우에는 ['String # substring'] (http : // docs. oracle.com/javase/6/docs/api/java/lang/String.html#substring%28int,%20int%29) 데이터를 부분적으로 분리하십시오. –

답변

3

비 복합체가 고정 길이 행이 일반 자바 매우 쉬워야한다 자바 6을 사용하고 믿을수을 구문 분석 할 수있는 방법을 의미합니다.

일반 기본 하위 문자열을 사용하지 않는 이유는 무엇입니까? 꽤 큰 플랫 파일을 파싱하는 데이 파일이 사용 된 것을 보았습니다. 그것에서 개관을 얻는 것은 꽤 쉽다.

myObject.setX(Integer.parseInt(input.substring(0,4))); 
myObject.setY(input.substring(5,12); 
.. 

여러 개의 큰 플랫 파일을 자바에 매핑하는 것이 매우 심각한 경우에는 일부 라이브러리를 사용하는 것이 좋습니다.

Smooks XML 파일에서 매핑을 지정하고 필드에서 객체로 smooks 런타임 매핑을 설정해 보겠습니다. 그래픽 매핑을위한 Eclipse IDE도 있습니다. 이 라이브러리는 다소 헤비급입니다.

Bindy 구성 요소는 실제로 Apache Camel에 있습니다. 메시지 라우터를 도입하는 데 오버 헤드가 필요하지만 일반 자바 클래스에 주석을 달고 매핑과 Java 클래스를 한 번에 수행 할 수 있습니다.

// Like this 
@FixedLengthRecord(length=54, paddingChar=' ') 
public static class Order { 

    @DataField(pos = 1, length=2) 
    private int orderNr; 

    @DataField(pos = 3, length=2) 
    private String clientNr; 
+0

oneToMany를 지원합니까? – gpa

+0

매우 흥미 롭습니다, 감사합니다. – GarouDan

+0

@gpa 예, OneToMany 주석이 있으며 여기에 자세한 문서가 있습니다. http://camel.apache.org/bindy –

관련 문제