내가 파싱 할 파일 중 하나는 두 개의 다른 콩으로 논리적으로 분할해야하는 두 부분으로 구성됩니다. 나는 MultiBeanListProcessor가이를 수행하는 좋은 방법이라는 것을 발견했다. 나는 내 코드의 소스로 test example 14을 사용했다. Univocity - MultiBeanListProcessor를 사용하여 반복 할 수 있습니까?
는 다음과 같은 구성을 감안할 때 : 는public class Sample {
public static void main(String[] args) throws IOException {
CsvParserSettings parserSettings = new CsvParserSettings();
parserSettings.getFormat().setDelimiter('|');
MultiBeanListProcessor processor = new MultiBeanListProcessor(Person.class, Address.class);
String[] headers = new String[7];
headers[0] = "id";
headers[1] = "firstName";
headers[2] = "lastName";
headers[3] = "city";
headers[4] = "streetName";
headers[5] = "houseNo";
headers[6] = "houseAdd";
String[] selectedFields = new String[5];
selectedFields[0] = "firstName";
selectedFields[1] = "lastName";
selectedFields[2] = "city";
selectedFields[3] = "streetName";
selectedFields[4] = "houseAdd";
parserSettings.setHeaders(headers);
parserSettings.selectFields(selectedFields);
parserSettings.setProcessor(processor);
parserSettings.setColumnReorderingEnabled(false);
CsvParser parser = new CsvParser(parserSettings);
parser.parse(new FileReader("src/main/resources/input.csv"));
List<Person> persons = processor.getBeans(Person.class);
List<Address> addresses = processor.getBeans(Address.class);
for (Person person : persons) {
System.out.println(person.getFirstName());
}
for (Address address : addresses) {
System.out.println(address.getCity());
}
}
}
이 정말 아주 좋은 작동합니다.
불행히도 입력 파일은 메모리에로드하기에 커야하며 한 번에 모두 구문 분석하는 대신 반복해야합니다. 이전에 묻은 question에서 각 빈에 대해 반복하는 방법에 대한 대답이있었습니다. 그러나이 논리/코드를이 사용 사례에 적용 할 수 없었습니다.
MultiBeanListProcessor를 사용할 때 각 bean을 반복하는 방법은 무엇입니까?
public void beanProcessed(Class<?> beanType, Object beanInstance, C context){
// your code here
}
빈의 새로운 인스턴스가 될 때마다 :
감사를하는 데 도움이됩니다. 프로세스 메서드 구현을 직접 작성하는 아이디어입니까? 마지막으로, 실제 응용 프로그램에는 두 개의 bean이 있으며 둘 다 인터페이스를 구현합니다. MultiBeanListProcessor를 사용하여 인터페이스로 표시된 클래스의 배열을로드했습니다. 'MultiBeanListProcessor processor = new MultiBeanListProcessor (classArray);' '클래스 [] classArray'는 Person과 Adress Bean으로 구성되지만 인터페이스로 구성됩니다. 이 유스 케이스에 따라 beanProcessed 메소드를 계속 사용할 수 있습니까? –
그걸 알아 냈어, 신참 캐스팅 실수를 저질렀다. 그것의 지금 일하고 나는 선 당 나의 논리를 적용 할 수있다. –