소개
이 랩에서는 Java 를 사용하여 CSV (Comma-Separated Values, 쉼표로 구분된 값) 파일에 데이터를 쓰는 방법을 배우게 됩니다. CSV 파일은 표 형식 데이터를 저장하는 데 널리 사용되는 일반적인 형식이며, 서로 다른 애플리케이션 간의 데이터 교환에 널리 사용됩니다.
Java 에서 CSV 파일을 쓰고 읽는 간단한 메서드를 제공하는 OpenCSV 라이브러리를 사용합니다. 이 랩이 끝나면 새로운 CSV 파일에 데이터를 쓰고 기존 파일에 추가 데이터를 추가할 수 있는 Java 프로그램을 만들게 됩니다.
CSV 파일 이해 및 프로젝트 설정
CSV (Comma-Separated Values, 쉼표로 구분된 값) 는 표 형식 데이터를 저장하는 데 사용되는 간단한 파일 형식입니다. CSV 파일의 각 줄은 데이터의 행을 나타내며, 행 내의 값은 쉼표로 구분됩니다. 예를 들어, 학생 데이터를 포함하는 CSV 파일은 다음과 같습니다.
Name,Age,Email
John Doe,25,john.doe@example.com
Jane Smith,22,jane.smith@example.com
CSV 파일 작업을 위해 간단한 Maven 프로젝트를 생성하는 것으로 시작해 보겠습니다. Maven 은 프로젝트의 종속성을 관리하는 데 도움이 되는 빌드 자동화 도구입니다.
- 먼저, WebIDE 에서 터미널을 열고 프로젝트 디렉토리로 이동합니다.
cd ~/project/csv-writer
- 프로젝트 디렉토리에
pom.xml이라는 새 파일을 생성합니다. 이 파일은 프로젝트 구조와 종속성을 정의합니다.
touch pom.xml
- WebIDE 편집기에서
pom.xml파일을 열고 다음 내용을 추가합니다.
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>csv-writer</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.4</version>
</dependency>
</dependencies>
</project>
이 XML 파일은 프로젝트를 정의하고 OpenCSV 라이브러리 (버전 5.4) 를 종속성으로 추가합니다. OpenCSV 는 CSV 파일을 읽고 쓰는 데 사용되는 간단한 클래스를 제공합니다.
- Java 소스 코드에 대한 디렉토리 구조를 생성합니다.
mkdir -p src/main/java/com/example
이 명령은 Java 소스 코드에 대한 표준 Maven 디렉토리 구조를 생성합니다.
간단한 CSV Writer 프로그램 생성
OpenCSV 종속성을 사용하여 프로젝트를 설정했으므로, 이제 CSV 파일에 데이터를 쓰는 Java 프로그램을 만들 수 있습니다.
- 앞서 생성한 디렉토리 구조에
CSVWriterExample.java라는 새 Java 클래스 파일을 생성합니다.
touch src/main/java/com/example/CSVWriterExample.java
- WebIDE 편집기에서
CSVWriterExample.java를 열고 다음 코드를 추가합니다.
package com.example;
import com.opencsv.CSVWriter;
import java.io.FileWriter;
import java.io.IOException;
public class CSVWriterExample {
public static void main(String[] args) {
try {
// Create a new CSVWriter instance
// The first parameter is a FileWriter with the file path
// The second parameter is the separator character (default is comma)
// The third parameter is the quote character (default is double quote)
// The fourth parameter is the escape character (default is backslash)
// The fifth parameter is the line ending (default is newline)
CSVWriter writer = new CSVWriter(new FileWriter("students.csv"),
CSVWriter.DEFAULT_SEPARATOR,
CSVWriter.DEFAULT_QUOTE_CHARACTER,
CSVWriter.DEFAULT_ESCAPE_CHARACTER,
CSVWriter.DEFAULT_LINE_END);
// Write header line
String[] header = {"Name", "Age", "Email"};
writer.writeNext(header);
// Write data lines
String[] student1 = {"John Doe", "25", "john.doe@example.com"};
writer.writeNext(student1);
String[] student2 = {"Jane Smith", "22", "jane.smith@example.com"};
writer.writeNext(student2);
// Close the writer to flush and release resources
writer.close();
System.out.println("CSV file created successfully!");
} catch (IOException e) {
System.out.println("Error writing to CSV file: " + e.getMessage());
e.printStackTrace();
}
}
}
이 코드는 다음을 수행합니다.
- OpenCSV 라이브러리 및 Java I/O 패키지에서 필요한 클래스를 가져옵니다.
students.csv라는 파일에 쓸CSVWriter객체를 생성합니다.- 필드 이름이 있는 헤더 행을 씁니다.
- 두 행의 학생 데이터를 씁니다.
- 모든 데이터가 파일에 플러시되도록 작성기를 닫습니다.
CSVWriter 생성자는 다섯 개의 매개변수를 갖습니다.
FileWriter: 쓸 파일을 지정합니다.- 구분자 문자: 필드를 구분하는 데 사용되는 문자 (기본값은 쉼표)
- 인용 문자: 필드를 인용하는 데 사용되는 문자 (기본값은 큰따옴표)
- 이스케이프 문자: 특수 문자를 이스케이프하는 데 사용되는 문자 (기본값은 백슬래시)
- 줄 끝: 줄을 끝내는 데 사용되는 문자 (기본값은 줄 바꿈)
- Maven 을 사용하여 Java 프로그램을 컴파일합니다.
cd ~/project/csv-writer
mvn compile
이 명령은 Maven 빌드 시스템을 사용하여 Java 소스 코드를 컴파일합니다.
CSV Writer 프로그램 실행
CSV 파일을 생성하고 결과를 확인하기 위해 Java 프로그램을 실행해 보겠습니다.
- Maven 을 사용하여 컴파일된 Java 프로그램을 실행합니다.
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVWriterExample"
exec-maven-plugin에 대한 오류 메시지가 표시되면, 이를 pom.xml에 추가해야 합니다.
- WebIDE 편집기에서
pom.xml을 열고 exec-maven-plugin 을 포함하도록 업데이트합니다.
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>csv-writer</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<mainClass>com.example.CSVWriterExample</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
- 이제 프로그램을 다시 실행합니다.
mvn exec:java
터미널 출력에 "CSV file created successfully!" 메시지가 표시되어야 합니다.
- CSV 파일이 생성되었고 예상 데이터를 포함하는지 확인해 보겠습니다.
cat students.csv
출력은 다음과 같은 CSV 파일 내용을 표시해야 합니다.
"Name","Age","Email"
"John Doe","25","john.doe@example.com"
"Jane Smith","22","jane.smith@example.com"
출력에 각 필드 주위에 따옴표가 포함되어 있음을 확인하십시오. 이것은 OpenCSV 의 기본 동작이며, 쉼표와 같은 특수 문자를 포함하는 필드를 처리하는 데 도움이 됩니다.
기존 CSV 파일에 데이터 추가
이제 CSV 파일을 만들었으므로, Java 프로그램을 수정하여 기존 파일을 덮어쓰는 대신 추가 데이터를 기존 파일에 추가해 보겠습니다.
CSVAppendExample.java라는 새 Java 파일을 생성합니다.
touch src/main/java/com/example/CSVAppendExample.java
- WebIDE 편집기에서
CSVAppendExample.java를 열고 다음 코드를 추가합니다.
package com.example;
import com.opencsv.CSVWriter;
import java.io.FileWriter;
import java.io.IOException;
public class CSVAppendExample {
public static void main(String[] args) {
try {
// Create a CSVWriter in append mode by setting the second parameter of FileWriter to true
CSVWriter writer = new CSVWriter(new FileWriter("students.csv", true));
// Write additional data to the existing file
String[] student3 = {"Robert Johnson", "24", "robert.johnson@example.com"};
writer.writeNext(student3);
String[] student4 = {"Maria Garcia", "23", "maria.garcia@example.com"};
writer.writeNext(student4);
// Close the writer
writer.close();
System.out.println("Data appended to CSV file successfully!");
} catch (IOException e) {
System.out.println("Error appending to CSV file: " + e.getMessage());
e.printStackTrace();
}
}
}
이 코드는 이전 예제와 유사하지만 두 가지 중요한 차이점이 있습니다.
FileWriter를 두 번째 매개변수를true로 설정하여 추가 모드로 생성합니다.- 파일에 이미 헤더 행이 있으므로 헤더 행을 쓰지 않습니다.
- 프로그램을 실행하여 기존 CSV 파일에 데이터를 추가합니다.
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVAppendExample"
- 이제 CSV 파일의 내용을 확인해 보겠습니다.
cat students.csv
원래 데이터와 새로 추가된 레코드를 볼 수 있습니다.
"Name","Age","Email"
"John Doe","25","john.doe@example.com"
"Jane Smith","22","jane.smith@example.com"
"Robert Johnson","24","robert.johnson@example.com"
"Maria Garcia","23","maria.garcia@example.com"
보시다시피 새 데이터는 기존 내용을 방해하지 않고 파일 끝에 추가되었습니다.
- 사용자 지정 구분 기호로 CSV 파일을 쓰는 방법을 보여주는 예제를 하나 더 만들어 보겠습니다.
touch src/main/java/com/example/CSVCustomExample.java
- WebIDE 편집기에서
CSVCustomExample.java를 열고 다음 코드를 추가합니다.
package com.example;
import com.opencsv.CSVWriter;
import java.io.FileWriter;
import java.io.IOException;
public class CSVCustomExample {
public static void main(String[] args) {
try {
// Create a CSVWriter with semicolon as separator instead of comma
CSVWriter writer = new CSVWriter(new FileWriter("students_semicolon.csv"),
';',
CSVWriter.DEFAULT_QUOTE_CHARACTER,
CSVWriter.DEFAULT_ESCAPE_CHARACTER,
CSVWriter.DEFAULT_LINE_END);
// Write header line
String[] header = {"Name", "Age", "Email"};
writer.writeNext(header);
// Write data lines
String[] student1 = {"John Doe", "25", "john.doe@example.com"};
writer.writeNext(student1);
String[] student2 = {"Jane Smith", "22", "jane.smith@example.com"};
writer.writeNext(student2);
// Close the writer
writer.close();
System.out.println("CSV file with semicolon separator created successfully!");
} catch (IOException e) {
System.out.println("Error writing to CSV file: " + e.getMessage());
e.printStackTrace();
}
}
}
이 예제는 쉼표 대신 세미콜론을 구분 기호로 사용하여 CSV 파일을 생성합니다. 이는 쉼표를 소수점 구분 기호로 사용하는 일부 유럽 국가에서 흔히 사용됩니다.
- 사용자 지정 구분 기호 예제를 실행합니다.
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVCustomExample"
- 새 CSV 파일의 내용을 확인합니다.
cat students_semicolon.csv
세미콜론을 구분 기호로 사용하는 CSV 파일을 볼 수 있습니다.
"Name";"Age";"Email"
"John Doe";"25";"john.doe@example.com"
"Jane Smith";"22";"jane.smith@example.com"
요약
이 Lab 에서는 OpenCSV 라이브러리를 사용하여 Java 로 CSV 파일에 데이터를 쓰는 방법을 배웠습니다. 다음을 성공적으로 수행했습니다.
- OpenCSV 종속성을 사용하여 Java 프로젝트를 설정했습니다.
- 새 CSV 파일에 데이터를 쓰는 기본 Java 프로그램을 만들었습니다.
- 기존 CSV 파일에 데이터를 추가하도록 프로그램을 수정했습니다.
- 다른 구분 기호를 사용하여 사용자 지정 CSV 작성기를 만들었습니다.
이러한 기술은 데이터 내보내기, 보고서 생성 및 시스템 간 데이터 교환과 같은 많은 응용 프로그램에 유용합니다. CSV 는 스프레드시트 소프트웨어 및 데이터 분석 도구와의 단순성과 호환성으로 인해 널리 사용되는 형식입니다.
주요 내용:
- OpenCSV 의
CSVWriter클래스는 Java 에서 CSV 파일을 쉽게 쓸 수 있는 방법을 제공합니다. - 새 CSV 파일을 생성하려면
CSVWriter와 함께new FileWriter(filename)을 사용합니다. - 기존 CSV 파일에 추가하려면
CSVWriter와 함께new FileWriter(filename, true)를 사용합니다. - 모든 데이터가 파일에 기록되도록 하려면 항상
writer.close()를 사용하여 작성기를 닫습니다. - 구분 기호, 따옴표 문자 및 CSV 형식의 다른 측면을 사용자 지정할 수 있습니다.
이러한 기본 사항을 통해 Java 애플리케이션에 CSV 쓰기 기능을 통합할 수 있습니다.



