반응형
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로 처리하면 정상적으로 한글이 읽힌다.
반응형
'JAVA' 카테고리의 다른 글
JAVA8 - 자바 1.8이상 버전에서 날짜, 시간 구하기(LocalDate, LocalTime, LocalDateTime) (0) | 2019.12.17 |
---|---|
JAVA - POI를 활용하여 자바에서 엑셀(.xlsx) 읽기 (0) | 2019.12.13 |
Java - 오늘, 어제, 이번달, 올해, 지난해 등 날짜 구하기 (0) | 2019.11.29 |
JAVA - request.getParameter 모든 값 확인하기(key, value 확인) (0) | 2019.11.29 |
JAVA - ajax JSON 데이터 통신하기 (0) | 2019.11.21 |