강좌 & 팁
글 수 2,412
2012.11.17 11:24:36 (*.52.177.29)
48200
저번 시간을 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
[실행 결과]
결과를 보면 Csv파일 내용이 AddressBean클래스에 리스트로 자동으로 저장이 된것 알 수 있습니다.
참 편리한 기능이죠.....^^;
이젠 CSV파일을 읽는것 을 해 봤으니 다음 시간에는 CSV파일을 한번 써 보기로 해보겠습니다.
절대 어렵지 않습니다. ^^;
지금한걸 조금만 변경하면 금방 쓰기도 가능합니다.(아닌가.....^^;)
그럼, 다음시간에....
감사합니다.