Notice
Recent Posts
Recent Comments
Link
꾸준한 개발일기
Java:: 한 줄에 나열된 데이터를 split으로 분리하여 csv 파일 쓰기 본문
반응형
연계 데이터를 csv 파일로 쓰고 이를 DB에 올리는 업무를 맡았다. 그 중 한줄로 나열된 데이터를 분리하여 csv 파일 한 칸에 담는 부분을 구현해보자.
기존 데이터
data1Ðdata2Ðdata3Ðdata4Ðdata5
data1Ðdata2Ðdata3Ðdata4Ðdata5
data1Ðdata2Ðdata3Ðdata4Ðdata5
기존 데이터는 구분자(Ð)로 구분되어있고 속성명이 없었다. 그대로 다운받으면 csv 파일 한칸에 한 라인이 모두 담겼다.
append()
String path = "C:\Download";
FileOutputStream out = new FileOutputStream (path);
// 파일적재
FileWriter fw = new FileWriter(path, false);
String sourceContent="";
BufferedReader in = (BufferedReader) tempMap.get("in");
// 테이블 속성
fw.append("column1" + ",");
fw.append("column2" + ",");
fw.append("column3" + ",");
fw.append("column4" + ",");
fw.append("column5" + "\n");
FileWriter fw를 선언해주고 append를 사용하여 속성명(column1, column2, ...)을 넣어주었다. vo를 이용하여 속성명을 넣어줄 수 있으나 일회용으로 사용될 때는 그냥 입력해준다.
replaceAll(A, B)
String tempTxt = sourceContent.replaceAll(",", " ");
csv 파일은 구분자가 콤마(,)이기 때문에 데이터 안의 콤마들을 모두 다른 특수기호로 바꿔야한다. 아직 구현 중인 단계로 일단 공백(" ")으로 설정하였다. 추가적인 수정이 필요한 부분이다.
split()
String[] txt = tempTxt.split("Ð");
구분자(Ð) 라인을 나누어 txt 배열에 담아준다.
for(조건) { }
for (int i = 0; i < txt.length; i++) {
if (i > 0) {
fw.append(txt[i] + ",");
}
if (i==txt.length-1) {
LOGGER.debug("fw ("+i+") : " + txt[i]);
fw.append(txt[i]);
fw.write(System.getProperty( "line.separator" ));
}
}
for문과 append를 사용하여 값을 각 칸에 넣어준다.
data1 | data2 | data3 | data4 | data5 |
csv 파일의 구분자는 콤마이기 때문에 데이터 뒤에 , 를 넣어준다.
해당 라인의 마지막 데이터 data5 뒤에는 콤마가 붙지 않게 if문으로 조건을 설정해준다.
System.getProperty( "line.separator" )
개행을 할 때 사용한다. 처음엔 읽어온 값 뒤에 /n을 붙여 개행했지만 csv 파일 형식이 틀어졌다. System.getProperty( "line.separator" )을 사용하니 형식이 망가지지 않고 개행일 잘 되었다.
전체 코드
try {
String path = "C:\Download";
FileOutputStream out = new FileOutputStream (path);
// 파일적재
FileWriter fw = new FileWriter(path, false);
String sourceContent="";
BufferedReader in = (BufferedReader) tempMap.get("in");
// 테이블 속성
fw.append("column1" + ",");
fw.append("column2" + ",");
fw.append("column3" + ",");
fw.append("column4" + ",");
fw.append("column5" + "\n");
// 데이터값
while((sourceContent = in.readLine()) != null) {
String tempTxt = sourceContent.replaceAll(",", " ");
String[] txt = tempTxt.split("Ð");
for (int i = 0; i < txt.length; i++) {
if (i > 0) {
fw.append(txt[i] + ",");
}
if (i==txt.length-1) {
LOGGER.debug("fw ("+i+") : " + txt[i]);
fw.append(txt[i]);
fw.write(System.getProperty( "line.separator" ));
}
}
}
fw.flush();
fw.close();
}catch(FileNotFoundException fe) {
LOGGER.debug("◈◈ FileNotFound : " + tempMap.get("path"));
}catch (IOException ioe) {
LOGGER.debug("◈◈ IOException : " + tempMap.get("path"));
}
반응형
'Programing > Java' 카테고리의 다른 글
java:: 지번주소에서 리 문자열 추출하기(split, contailns) (0) | 2022.03.31 |
---|
Comments