Java 를 사용하여 CSV 파일에 데이터 쓰기

JavaBeginner
지금 연습하기

소개

이 랩에서는 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 은 프로젝트의 종속성을 관리하는 데 도움이 되는 빌드 자동화 도구입니다.

  1. 먼저, WebIDE 에서 터미널을 열고 프로젝트 디렉토리로 이동합니다.
cd ~/project/csv-writer
  1. 프로젝트 디렉토리에 pom.xml이라는 새 파일을 생성합니다. 이 파일은 프로젝트 구조와 종속성을 정의합니다.
touch pom.xml
  1. 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 파일을 읽고 쓰는 데 사용되는 간단한 클래스를 제공합니다.

  1. Java 소스 코드에 대한 디렉토리 구조를 생성합니다.
mkdir -p src/main/java/com/example

이 명령은 Java 소스 코드에 대한 표준 Maven 디렉토리 구조를 생성합니다.

간단한 CSV Writer 프로그램 생성

OpenCSV 종속성을 사용하여 프로젝트를 설정했으므로, 이제 CSV 파일에 데이터를 쓰는 Java 프로그램을 만들 수 있습니다.

  1. 앞서 생성한 디렉토리 구조에 CSVWriterExample.java라는 새 Java 클래스 파일을 생성합니다.
touch src/main/java/com/example/CSVWriterExample.java
  1. 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: 쓸 파일을 지정합니다.
  • 구분자 문자: 필드를 구분하는 데 사용되는 문자 (기본값은 쉼표)
  • 인용 문자: 필드를 인용하는 데 사용되는 문자 (기본값은 큰따옴표)
  • 이스케이프 문자: 특수 문자를 이스케이프하는 데 사용되는 문자 (기본값은 백슬래시)
  • 줄 끝: 줄을 끝내는 데 사용되는 문자 (기본값은 줄 바꿈)
  1. Maven 을 사용하여 Java 프로그램을 컴파일합니다.
cd ~/project/csv-writer
mvn compile

이 명령은 Maven 빌드 시스템을 사용하여 Java 소스 코드를 컴파일합니다.

CSV Writer 프로그램 실행

CSV 파일을 생성하고 결과를 확인하기 위해 Java 프로그램을 실행해 보겠습니다.

  1. Maven 을 사용하여 컴파일된 Java 프로그램을 실행합니다.
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVWriterExample"

exec-maven-plugin에 대한 오류 메시지가 표시되면, 이를 pom.xml에 추가해야 합니다.

  1. 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>
  1. 이제 프로그램을 다시 실행합니다.
mvn exec:java

터미널 출력에 "CSV file created successfully!" 메시지가 표시되어야 합니다.

  1. 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 프로그램을 수정하여 기존 파일을 덮어쓰는 대신 추가 데이터를 기존 파일에 추가해 보겠습니다.

  1. CSVAppendExample.java라는 새 Java 파일을 생성합니다.
touch src/main/java/com/example/CSVAppendExample.java
  1. 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로 설정하여 추가 모드로 생성합니다.
  • 파일에 이미 헤더 행이 있으므로 헤더 행을 쓰지 않습니다.
  1. 프로그램을 실행하여 기존 CSV 파일에 데이터를 추가합니다.
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVAppendExample"
  1. 이제 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"

보시다시피 새 데이터는 기존 내용을 방해하지 않고 파일 끝에 추가되었습니다.

  1. 사용자 지정 구분 기호로 CSV 파일을 쓰는 방법을 보여주는 예제를 하나 더 만들어 보겠습니다.
touch src/main/java/com/example/CSVCustomExample.java
  1. 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 파일을 생성합니다. 이는 쉼표를 소수점 구분 기호로 사용하는 일부 유럽 국가에서 흔히 사용됩니다.

  1. 사용자 지정 구분 기호 예제를 실행합니다.
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVCustomExample"
  1. 새 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 파일에 데이터를 쓰는 방법을 배웠습니다. 다음을 성공적으로 수행했습니다.

  1. OpenCSV 종속성을 사용하여 Java 프로젝트를 설정했습니다.
  2. 새 CSV 파일에 데이터를 쓰는 기본 Java 프로그램을 만들었습니다.
  3. 기존 CSV 파일에 데이터를 추가하도록 프로그램을 수정했습니다.
  4. 다른 구분 기호를 사용하여 사용자 지정 CSV 작성기를 만들었습니다.

이러한 기술은 데이터 내보내기, 보고서 생성 및 시스템 간 데이터 교환과 같은 많은 응용 프로그램에 유용합니다. CSV 는 스프레드시트 소프트웨어 및 데이터 분석 도구와의 단순성과 호환성으로 인해 널리 사용되는 형식입니다.

주요 내용:

  • OpenCSV 의 CSVWriter 클래스는 Java 에서 CSV 파일을 쉽게 쓸 수 있는 방법을 제공합니다.
  • 새 CSV 파일을 생성하려면 CSVWriter와 함께 new FileWriter(filename)을 사용합니다.
  • 기존 CSV 파일에 추가하려면 CSVWriter와 함께 new FileWriter(filename, true)를 사용합니다.
  • 모든 데이터가 파일에 기록되도록 하려면 항상 writer.close()를 사용하여 작성기를 닫습니다.
  • 구분 기호, 따옴표 문자 및 CSV 형식의 다른 측면을 사용자 지정할 수 있습니다.

이러한 기본 사항을 통해 Java 애플리케이션에 CSV 쓰기 기능을 통합할 수 있습니다.