Home

(자바 실무) CSV 파일 읽기/쓰기 완벽 가이드 - 코딩하는곰의 Java 입출력 활용

Published in java
June 15, 2024
2 min read
(자바 실무) CSV 파일 읽기/쓰기 완벽 가이드 - 코딩하는곰의 Java 입출력 활용

안녕하세요, 20년차 자바 개발자 코딩하는곰입니다. 오늘은 실무에서 자주 마주치는 CSV 파일 처리에 대해 깊이 있게 다루어보려고 합니다. 데이터 교환의 표준 형식인 CSV는 다양한 시스템 간 데이터 이동에 필수적이죠. 이 글에서는 순수 자바 코드부터 유명 라이브러리 활용까지, 현업에서 바로 적용 가능한 다양한 방법을 상세히 소개드리겠습니다. 특히 대용량 처리 시 발생할 수 있는 성능 문제와 그 해결책도 함께 다룰 예정이니 끝까지 함께 해주세요!

(자바 실무) CSV 파일 읽기/쓰기 완벽 가이드 - 코딩하는곰의 Java 입출력 활용
(자바 실무) CSV 파일 읽기/쓰기 완벽 가이드 - 코딩하는곰의 Java 입출력 활용


1. 자바 기본 라이브러리로 CSV 읽기/쓰기

가장 기본적인 방법부터 시작해보겠습니다. 자바 표준 라이브러리만으로 CSV 파일을 처리하는 방법은 크게 두 가지가 있습니다.

1.1 FileReader/BufferedReader를 이용한 CSV 읽기

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BasicCSVReader {
public static void main(String[] args) {
String filePath = "data.csv";
try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = br.readLine()) != null) {
String[] values = line.split(",");
// 처리 로직
System.out.println(Arrays.toString(values));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

이 방식은 간단하지만 몇 가지 주의점이 있습니다:

  • 셀 내에 쉼표가 포함된 경우 처리 필요
  • 큰따옴표로 감싸진 데이터 처리
  • 라인 끝 처리 방식(CR, LF, CRLF) 차이 고려

1.2 FileWriter/BufferedWriter를 이용한 CSV 쓰기

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class BasicCSVWriter {
public static void main(String[] args) {
String filePath = "output.csv";
String[] headers = {"이름", "나이", "직업"};
String[][] data = {
{"홍길동", "30", "개발자"},
{"김철수", "25", "디자이너"}
};
try (BufferedWriter bw = new BufferedWriter(new FileWriter(filePath))) {
// 헤더 작성
bw.write(String.join(",", headers));
bw.newLine();
// 데이터 작성
for (String[] row : data) {
bw.write(String.join(",", row));
bw.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

기본 방식의 장점은 별도의 라이브러리가 필요 없다는 것이지만, 복잡한 형식의 CSV를 처리하기에는 한계가 있습니다. 다음 장에서는 더 강력한 라이브러리를 소개드리겠습니다.

(자바 실무) CSV 파일 읽기/쓰기 완벽 가이드 - 코딩하는곰의 Java 입출력 활용
(자바 실무) CSV 파일 읽기/쓰기 완벽 가이드 - 코딩하는곰의 Java 입출력 활용


2. OpenCSV 라이브러리 활용하기

OpenCSV는 CSV 처리에 특화된 인기 라이브러리입니다. 의존성 추가가 필요하며, Maven 프로젝트라면 pom.xml에 다음을 추가합니다:

<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.7.1</version>
</dependency>

2.1 OpenCSV로 CSV 읽기

import com.opencsv.CSVReader;
import com.opencsv.exceptions.CsvException;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;
public class OpenCSVReaderExample {
public static void main(String[] args) {
try (CSVReader reader = new CSVReader(new FileReader("data.csv"))) {
List<String[]> allData = reader.readAll();
for (String[] row : allData) {
System.out.println(Arrays.toString(row));
}
} catch (IOException | CsvException e) {
e.printStackTrace();
}
}
}

OpenCSV의 장점:

  • 셀 내 쉼표, 개행 문자 자동 처리
  • 타입 변환 지원(CSVToBean)
  • 대용량 파일을 위한 점진적 읽기 지원

2.2 OpenCSV로 CSV 쓰기

import com.opencsv.CSVWriter;
import java.io.FileWriter;
import java.io.IOException;
public class OpenCSVWriterExample {
public static void main(String[] args) {
try (CSVWriter writer = new CSVWriter(new FileWriter("output.csv"))) {
// 헤더 작성
writer.writeNext(new String[]{"이름", "나이", "직업"});
// 데이터 작성
writer.writeNext(new String[]{"홍길동", "30", "개발자"});
writer.writeNext(new String[]{"김철수", "25", "디자이너"});
} catch (IOException e) {
e.printStackTrace();
}
}
}

OpenCSV는 설정을 통해 구분자, 따옴표 처리 방식 등을 유연하게 변경할 수 있어 실무에서 매우 유용합니다.

(자바 실무) CSV 파일 읽기/쓰기 완벽 가이드 - 코딩하는곰의 Java 입출력 활용
(자바 실무) CSV 파일 읽기/쓰기 완벽 가이드 - 코딩하는곰의 Java 입출력 활용


스트레스 해소와 두뇌 훈련을 동시에 하고 싶다면, 편안한 분위기의 스도쿠 저니: 크립토 할아버지가 완벽한 선택입니다.

3. Apache Commons CSV 활용하기

아파치에서 제공하는 Commons CSV는 또 다른 강력한 선택지입니다. Maven 의존성 추가:

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.9.0</version>
</dependency>

3.1 Commons CSV로 CSV 읽기

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class CommonsCSVReader {
public static void main(String[] args) {
try (Reader reader = new FileReader("data.csv");
CSVParser csvParser = new CSVFormat.Builder()
.setHeader()
.setSkipHeaderRecord(true)
.build()
.parse(reader)) {
for (CSVRecord record : csvParser) {
String name = record.get("이름");
String age = record.get("나이");
System.out.println(name + ", " + age);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

3.2 Commons CSV로 CSV 쓰기

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class CommonsCSVWriter {
public static void main(String[] args) {
try (Writer writer = new FileWriter("output.csv");
CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT
.withHeader("이름", "나이", "직업"))) {
csvPrinter.printRecord("홍길동", 30, "개발자");
csvPrinter.printRecord("김철수", 25, "디자이너");
csvPrinter.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}

Commons CSV의 특징:

  • RFC 4180 표준 준수
  • 다양한 CSV 형식(Excel, MySQL 등)에 대한 프리셋 제공
  • 스트리밍 방식으로 대용량 파일 처리 가능

(자바 실무) CSV 파일 읽기/쓰기 완벽 가이드 - 코딩하는곰의 Java 입출력 활용
(자바 실무) CSV 파일 읽기/쓰기 완벽 가이드 - 코딩하는곰의 Java 입출력 활용


두뇌 건강을 위한 재미있는 퍼즐 게임을 찾고 있다면, 크립토 할아버지의 스토리와 함께하는 스도쿠 저니를 추천합니다.

오늘은 자바에서 CSV 파일을 처리하는 다양한 방법을 살펴보았습니다. 기본 IO부터 OpenCSV, Apache Commons CSV까지, 각 방법마다 장단점이 있으니 프로젝트 요구사항에 맞게 선택하시면 됩니다. 특히 대용량 파일을 다룰 때는 메모리 사용량과 성능을 반드시 고려해야 합니다. 더 궁금한 점이 있으면 댓글로 남겨주세요! 다음 시간에는 더 유용한 자바 실무 팁으로 찾아오겠습니다. 코딩하는곰이었습니다. 감사합니다!

🎭 문화와 예술을 가까이에서 느끼고 싶다면, 2025 전주세계소리축제를 참고해보세요.









최상의 건강을 위한 영양가득한 식품과 정보! life-plus.co.kr 바로가기
최상의 건강을 위한 영양가득한 식품과 정보! life-plus.co.kr 바로가기



다채로운 문화축제와 공연 소식을 공유하는 블로그! culturestage.co.kr 바로가기
다채로운 문화축제와 공연 소식을 공유하는 블로그! culturestage.co.kr 바로가기



비트코인 세계로의 첫걸음! 지금 가입하고 거래 수수료 할인 혜택 받으세요! bitget.com 바로가기
비트코인 세계로의 첫걸음! 지금 가입하고 거래 수수료 할인 혜택 받으세요! bitget.com 바로가기




Tags

#developer#coding#java

Share

Previous Article
(Spring Boot) 자바로 간단한 블로그 API 만들기 - 초보자를 위한 완벽 가이드

Table Of Contents

1
1. 자바 기본 라이브러리로 CSV 읽기/쓰기
2
2. OpenCSV 라이브러리 활용하기
3
3. Apache Commons CSV 활용하기

Related Posts

(Java 예외 처리 마스터하기) 다중 catch와 예외 흐름 제어의 모든 것 - 코딩하는곰의 20년 노하우
December 16, 2025
3 min