JAVA
JAVA - CSV 파일 읽기(한글 읽기, 한글 깨짐 방지, CSV 인코딩 UTF-8 저장)
Park.S.W
2019. 12. 11. 10:07
반응형
CSV(comma-separated values)는 쉼표로 구분한 텍스트 파일로 확장자가.csv로 이다.
엑셀로 읽기도 편하고 간편하게 파일을 읽고 쓰는 방식으로 쉼표로 구분되어 있는 csv파일을 자바에서 읽는 방법을 포스팅한다.
CsvUtils.java
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class CsvUtils {
private static Log logger = LogFactory.getLog(CsvUtils.class);
public static List<List<String>> readToList(String path) {
List<List<String>> list = new ArrayList<List<String>>();
File csv = new File(path);
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(csv));
Charset.forName("UTF-8");
String line = "";
while((line=br.readLine()) != null) {
String[] token = line.split(",");
List<String> tempList = new ArrayList<String>(Arrays.asList(token));
list.add(tempList);
}
} catch (FileNotFoundException e) {
logger.error(e);
} catch (IOException e) {
logger.error(e);
} finally {
try {
if(br != null) {br.close();}
} catch (IOException e) {
logger.error(e);
}
}
return list;
}
}
로거부분은 제외하고 봐도 무관하다.
파라미터로 넘어온 경로를 읽어서 csv파일을 읽고 리스트로 return처리를 하는 함수다.
사용 호출부분
main.java
import java.util.List;
public class Main {
public static void main(String[] args) {
String path = "csv파일이 있는 경로 지정";
List<List<String>> list = CsvUtils.readToList(path);
for(int i=0; i<list.size(); i++) {
List<String> line = list.get(i);
for(int j=0; j<line.size(); j++) {
System.out.print(line.get(j)+",");
}
System.out.println();
}
}
}
csv데이터
결과
한글 처리시 유의점은 UTF-8로 csv파일이 인코딩이 된 문서여야 읽힌다는 점이다.
엑셀에서 csv로 저장시에도 기본 인코딩인 유니코드로만 저장되는 점을 발견하였고, 강제 인코딩 방법으론
csv파일을 엑셀로 열지 말고 메모장으로 열어주고 다른 이름으로 저장 클릭 후 인코딩을 UTF-8로 처리하면 정상적으로 한글이 읽힌다.
반응형