강좌 & 팁
글 수 2,412
2012.11.24 12:30:53 (*.52.177.29)
49360
저번 시간엔 CSV파일 읽기를 해봤으니 이번 시간에는 쓰기를 해보겠습니다.
아쉬운 점은 읽기에서는 CsvToBean이라는 걸로 Csv파일 읽은걸 쉽게 Bean에 넣을수 있어서 쓰기에서도
쉽게 쓸수 있겠구나 했는데.....
쓰기에서는 Bean형식을 그대로 쓸수가 없더군요...ㅡㅜ
조금 아쉬운 부분.....
쓰기에 기본 형식은 아래 같습니다.
CSVWriter writer = new CSVWriter(new FileWriter("yourfile.csv"), '\t'); // feed in your array (or convert your data to an array) String[] entries = "first#second#third".split("#"); writer.writeNext(entries); writer.close();
'\t' <- 구분자 입니다. 예제에 나온건 구분자를 탭으로 하는 형식입니다.
라인 쓰기 할때에는 writeNext(String배열)형식 으로 사용합니다.
Bean을 사용 할 경우에는 꼼수가 필요합니다.
저번 시간 읽기에 사용했던 AddressBean에 csvString()라는 메소드를 추가해 Bean에 들어있는 값들을 ','로 구분을 지어
문자열로 반환하게 만들었습니다.
설명이 길어지면 뭔소린지 잘 모르기 때문에 소스를 한번 보시죠........
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(); } public String csvString() { StringBuilder str = new StringBuilder(); str.append(name).append(","); str.append(address).append(","); str.append(telNo); return str.toString(); } }
[샘플소스]
import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.List; import au.com.bytecode.opencsv.CSVWriter; public class OpenCsvWrite { private void writer(String filePath) throws IOException { // 출력할 데이터 List<AddressBean> data = getData(); // csv write생성 // ','를 구분자로해서 출력하도록 설정 CSVWriter writer = new CSVWriter(new FileWriter(filePath), CSVWriter.DEFAULT_SEPARATOR); // loop for (AddressBean addrBean : data) { // wirteNext에는 인자로 String배열을 넘김 // 그러기 위해서는 AddressBean.csvString()에 만들어 놓은 문자열을 // 구분자 ','로 split으로 String배열을 구해 witeNext()에 넘김 writer.writeNext(addrBean.csvString().split(",")); } // 화일 닫기 writer.close(); } public static void main(String[] args) { OpenCsvWrite csvWrite = new OpenCsvWrite(); try { csvWrite.writer("./test_write.csv"); } catch (IOException e) { e.printStackTrace(); } } private List<AddressBean> getData() { List<AddressBean> data = new ArrayList<AddressBean>(); AddressBean addrBean = new AddressBean(); addrBean.setName("이기자"); addrBean.setAddress("서울시 강북"); addrBean.setTelNo("010-XXXX-XXXX"); data.add(addrBean); addrBean = new AddressBean(); addrBean.setName("이길래"); addrBean.setAddress("서울시 강남"); addrBean.setTelNo("010-XXXX-XXXX"); data.add(addrBean); addrBean = new AddressBean(); addrBean.setName("이길껄"); addrBean.setAddress("서울시 서초"); addrBean.setTelNo("010-XXXX-XXXX"); data.add(addrBean); return data; } }
설명은 소스를 확인 하세요... ^^;
[실행 결과]
""<-이걸 없애고 싶었는데 어떻게 없애는지 모르겠어요. ㅜㅜ
어쨌든 CSV파일로 쓰기를 해봤습니다.
좀더 좋은 방법을 아시는분은 댓글에 남겨주시면 감사하겠습니다.
감사합니다.