저번 시간을 OpenCsv라이브러리로 CSV파일 읽기를 해보았습니다.


이번시간은 OpenCsv에서 제공하는 CsvToBean을 가지고 좀더 쉽고 편하게 Bean클래스에 데이터를 설정하는

방법에 대해 알아보도록 하겠습니다.


CsvToBean는 Csv파일을 읽어들여 Bean으로 만들어놓은 클래스 

즉 get/set이 들어 있는 클래스에 자동으로 값을 셋팅해주는 방법입니다.


먼저, 아래와 같이 어드레스 빈 클래스를 만듭니다.

public class AddressBean {
 
	private String name;
	private String address;
	private String telNo;
	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}
	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}
	/**
	 * @return the address
	 */
	public String getAddress() {
		return address;
	}
	/**
	 * @param address the address to set
	 */
	public void setAddress(String address) {
		this.address = address;
	}
	/**
	 * @return the telNo
	 */
	public String getTelNo() {
		return telNo;
	}
	/**
	 * @param telNo the telNo to set
	 */
	public void setTelNo(String telNo) {
		this.telNo = telNo;
	}
 
	@Override
	public String toString() {
 
		StringBuilder str = new StringBuilder();
		str.append("name=").append(name).append(", ");
		str.append("address=").append(address).append(", ");
		str.append("telNo=").append(telNo);
 
		return str.toString();
	}
}


Bean으로 만든 클래스는 단지 데이터를 저장하기 위한 클래스입니다. 

클래스에는 필드정의와 get/set만이 설정되어있습니다.


그다음은 read클래스 입니다. 저번시간과 동일한 클래스 명을 사용하고 있으면

저번시간의 내용은 커멘트 처리하였습니다. 어떻게 틀린지 한번 비교 해보세요.


import java.io.FileReader;
import java.io.IOException;
import java.util.List;
 
import au.com.bytecode.opencsv.CSVReader;
import au.com.bytecode.opencsv.bean.ColumnPositionMappingStrategy;
import au.com.bytecode.opencsv.bean.CsvToBean;
 
public class OpenCsvReader {
 
	private void reader(String filePath) throws IOException {
 
//		CSVReader reader = new CSVReader(new FileReader(filePath));
//		String[] nextLine;
//		while ((nextLine = reader.readNext()) != null) {
//			// nextLine[] is an array of values from the line
//			System.out.println("이름 : " + nextLine[0]);
//			System.out.println("주소 : " + nextLine[1]);
//			System.out.println("전화 : " + nextLine[2]);
//			System.out.println();
//		}
 
		CSVReader reader = new CSVReader(new FileReader(filePath));
		ColumnPositionMappingStrategy<AddressBean> addrBean = new ColumnPositionMappingStrategy<AddressBean>();
		addrBean.setType(AddressBean.class);
 
		// Bean에 선언되어 있는 필드 명을 정의 한다.
		String[] columns = new String[] { "name", "address", "telNo"};
 
		// 컬럼을 맵핑 시킴
		addrBean.setColumnMapping(columns);
 
		CsvToBean<AddressBean> csv = new CsvToBean<AddressBean>();
		// 어드레스 리스트
		List<AddressBean> resultList = csv.parse(addrBean, reader);
 
		// 파일 닫기
		reader.close();
 
		// 표준 출력해 확인
		for (AddressBean addr : resultList) {
			System.out.println(addr);
		}
	}
 
	public static void main(String[] args)  {
 
 
		OpenCsvReader csvRead = new OpenCsvReader();
 
		try {
			csvRead.reader("./test.csv");
		} catch (IOException e) {
			e.printStackTrace();
		}
 
	}
}


CSV파일은 저번 시간과 동일 합니다.

그래도 혹시나... 아래를 참고하세요.(test.csv파일 내용)

이기자,서울시 강북,010-XXXX-XXXX
김철순,서울시 강남,010-XXXX-XXXX
박순심,서울시 서초,010-XXXX-XXXX
강기남,서울시 송파,010-XXXX-XXXX



[실행 결과]

csvTobean.png


결과를 보면 Csv파일 내용이 AddressBean클래스에 리스트로 자동으로 저장이 된것 알 수 있습니다.

참 편리한 기능이죠.....^^;


이젠 CSV파일을 읽는것 을 해 봤으니 다음 시간에는 CSV파일을 한번 써 보기로 해보겠습니다.

절대 어렵지 않습니다. ^^;

지금한걸 조금만 변경하면 금방 쓰기도 가능합니다.(아닌가.....^^;)


그럼,  다음시간에....

감사합니다.