꾸준한 개발일기

Java:: 한 줄에 나열된 데이터를 split으로 분리하여 csv 파일 쓰기 본문

Programing/Java

Java:: 한 줄에 나열된 데이터를 split으로 분리하여 csv 파일 쓰기

꾸개일 2021. 11. 11. 19:21
반응형

연계 데이터를 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"));
		}
반응형
Comments