728x90

 

 

위키백과에 나온 csv정의는 아래와 같습니다.

CSV(영어: comma-separated values)는 몇 가지 필드를 쉼표(,)로 구분한 텍스트 데이터 및 텍스트 파일이다. 확장자는 . csv이며 MIME 형식은 text/csv이다

 

데이터가 ,(콤마)로 구분되어있는 텍스트형식의 데이터인데 excel로 열면 표로 표현이되고 xlsx파일로 변환해서 저장도 가능하기 때문에 자주 사용하는 방식중 하나입니다.

 

자바 스프링에서 엑셀파일을 생성할려면 poi등 라이브러리를 사용해야하지만

Csv경우 Stringbuffer와 outputstream만 있으면 되기때문에 쉽게 생성할 수 있습니다.

또한 데이터 분석시 csv파일을 많이 사용하기 떄문에 데이터를 제공할떄도 좋다고 생각합니다.

 

우선 csv로 뽑을 데이터를 list형식으로 뽑아온 뒤 StringBuffer 객체를 생성해주고 각 컬럼이 어떤데이터인지 알아야하기 떄문에

맨윗줄에 컬럼명을 적어줍니다

List<ReportVo> reportList = reportMapper.getReportListExcel(vo);
			
			StringBuffer sb = new StringBuffer(); 
			sb.append("사용자ID,사용자발화,의도명,만족도,등록일,채널");

그 후 list를 포문으로 돌려서 index데이터를 row로 저장시킵니다.

위에서 말했듯 csv는 텍스트형 데이터라고 했기 떄문에 각row는 “\n”을 사용해서 구분을 해줍니다.

 

for(int reportListCnt = 0; reportListCnt < reportList.size(); reportListCnt++) {
	String row = reportList.get(reportListCnt).getUser_id() + ',' 
    	//내용에 ,또는 \n이있으면 행렬이 꺠지기떄문에 replace처리를 해준다
        + reportList.get(reportListCnt).getUtterance().replace(',', ' ').replace('\n',  ' ') + ','
		+ reportList.get(reportListCnt).getIntent_title().replace(',', ' ') + ',' 
        + reportList.get(reportListCnt).getSatisfaction() + ','
		+ reportList.get(reportListCnt).getCreate_date() + ',' 
        + reportList.get(reportListCnt).getChannel();

	sb.append("\n");
	sb.append(row);
}

 

저는 리스트로 뽑아온 데이터를 row에 넣어준것이고 자신의 방법에 맞게 각각의 데이터를 ,로 구분해서 row를 만들어주시면 됩니다.

String row = “가.나,다,라,마,바”;

이런 형식을 만들어주시면 됩니다.

 

저는 서버 특정경로에 바로 떨굴게 아니고 브라우저를 통해서 다운로드가 되도록 할것이기 떄문에 

 

이렇게 response를 set해주고 filename에 다운받아지는 파일명을 적어줍니다.

그리고 outputStream을 통해 다운을 받으면 여전이 한글이 꺠져서 나오기 떄문에 아래와같이 

outputStream.write(sb.toString().getBytes("MS949"));

형식으로 넣어줍니다.

 

response.setContentType("text/csv");
response.setHeader("Content-Disposition", "attachment; filename=\"chatLog.csv\"");
response.setHeader("Content-Type","text/csv; charset=MS949" );

OutputStream outputStream = response.getOutputStream();
outputStream.write(sb.toString().getBytes("MS949"));
outputStream.flush();
outputStream.close();
sb.setLength(0);

 

마지막으로 메모리 확보를 위해 outputStream.flush(), outputStream.close()를 해주고

StringBuffer 초기화를 해줍니다 .

 

'자바 JAVA' 카테고리의 다른 글

Spring에서 비동기 처리하기 @EnableAsync  (0) 2024.11.22
2. 자바 JAVA - 스트림(stream)  (0) 2023.04.05
1. 자바 JAVA - 스트림(stream)  (0) 2023.01.17
자바 JAVA - 람다 표현식  (0) 2023.01.14

+ Recent posts