Запись данных в файл CSV с использованием Java

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь записывать данные в файлы CSV (Comma-Separated Values, значения, разделенные запятыми) с использованием Java. Файлы CSV - это распространенный формат для хранения табличных данных и широко используются для обмена данными между различными приложениями.

Вы будете использовать библиотеку OpenCSV, которая предоставляет простые методы для записи и чтения файлов CSV на Java. К концу этого практического занятия вы создадите Java-программу, которая может записывать данные в новый файл CSV и добавлять дополнительные данные в существующий файл.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/FileandIOManagementGroup(["File and I/O Management"]) java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/BasicSyntaxGroup -.-> java/output("Output") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/packages_api("Packages / API") java/FileandIOManagementGroup -.-> java/files("Files") java/FileandIOManagementGroup -.-> java/create_write_files("Create/Write Files") java/FileandIOManagementGroup -.-> java/io("IO") subgraph Lab Skills java/output -.-> lab-117458{{"Запись данных в файл CSV с использованием Java"}} java/packages_api -.-> lab-117458{{"Запись данных в файл CSV с использованием Java"}} java/files -.-> lab-117458{{"Запись данных в файл CSV с использованием Java"}} java/create_write_files -.-> lab-117458{{"Запись данных в файл CSV с использованием Java"}} java/io -.-> lab-117458{{"Запись данных в файл CSV с использованием Java"}} end

Понимание файлов CSV и настройка проекта

CSV (Comma-Separated Values, значения, разделенные запятыми) - это простой формат файлов, используемый для хранения табличных данных. Каждая строка в файле CSV представляет строку данных, а значения в строке разделяются запятыми. Например, файл CSV, содержащий данные о студентах, может выглядеть так:

Name,Age,Email
John Doe,25,john.doe@example.com
Jane Smith,22,jane.smith@example.com

Начнем с создания простого Maven-проекта для работы с файлами CSV. Maven - это инструмент автоматизации сборки, который поможет нам управлять зависимостями нашего проекта.

  1. Сначала откройте терминал в WebIDE и перейдите в директорию проекта:
cd ~/project/csv-writer
  1. Создайте новый файл с именем pom.xml в директории проекта. Этот файл определит структуру нашего проекта и его зависимости:
touch pom.xml
  1. Откройте файл pom.xml в редакторе WebIDE и добавьте следующее содержимое:
<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

Эта команда создает стандартную структуру директорий Maven для Java-источника.

Создание простой программы для записи в файл CSV

Теперь, когда мы настроили наш проект с зависимостью от OpenCSV, мы можем создать Java-программу, которая записывает данные в файл CSV.

  1. Создайте новый Java-класс с именем CSVWriterExample.java в структуре директорий, которую мы создали ранее:
touch src/main/java/com/example/CSVWriterExample.java
  1. Откройте файл CSVWriterExample.java в редакторе WebIDE и добавьте следующий код:
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
  • Создает объект CSVWriter, который будет записывать в файл с именем students.csv
  • Записывает строку заголовка с именами полей
  • Записывает две строки данных о студентах
  • Закрывает писатель, чтобы убедиться, что все данные были записаны в файл

Конструктор CSVWriter имеет пять параметров:

  • FileWriter: Указывает файл, в который будет производиться запись
  • Символ-разделитель: Символ, используемый для разделения полей (по умолчанию - запятая)
  • Символ кавычек: Символ, используемый для обрамления полей (по умолчанию - двойные кавычки)
  • Символ экранирования: Символ, используемый для экранирования специальных символов (по умолчанию - обратный слэш)
  • Символ окончания строки: Символ, используемый для завершения строк (по умолчанию - новая строка)
  1. Скомпилируйте Java-программу с использованием Maven:
cd ~/project/csv-writer
mvn compile

Эта команда компилирует наш Java-источник с использованием системы сборки Maven.

Запуск программы для записи в файл CSV

Запустим нашу Java-программу для создания файла CSV и посмотрим на результаты.

  1. Выполните скомпилированную Java-программу с использованием Maven:
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVWriterExample"

Если вы увидите сообщение об ошибке о exec-maven-plugin, нам нужно добавить его в наш pom.xml:

  1. Откройте файл pom.xml в редакторе WebIDE и обновите его, чтобы включить 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. Создайте новый Java-файл с именем CSVAppendExample.java:
touch src/main/java/com/example/CSVAppendExample.java
  1. Откройте файл CSVAppendExample.java в редакторе WebIDE и добавьте следующий код:
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. Откройте файл CSVCustomExample.java в редакторе WebIDE и добавьте следующий код:
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"

Итоги

В этом практическом занятии вы узнали, как записывать данные в файлы CSV на Java с использованием библиотеки OpenCSV. Вы успешно:

  1. Создали Java-проект с зависимостью от OpenCSV
  2. Создали простую Java-программу для записи данных в новый файл CSV
  3. Изменили программу для добавления данных в существующий файл CSV
  4. Создали пользовательский писатель CSV с другим разделительным символом

Эти навыки полезны для многих приложений, таких как экспорт данных, создание отчетов и обмен данными между системами. CSV - это широко используемый формат из-за своей простоты и совместимости с табличным программным обеспечением и инструментами для анализа данных.

Основные выводы:

  • Класс CSVWriter из библиотеки OpenCSV предоставляет простой способ записи файлов CSV на Java
  • Чтобы создать новый файл CSV, используйте new FileWriter(filename) вместе с CSVWriter
  • Чтобы добавить данные в существующий файл CSV, используйте new FileWriter(filename, true) вместе с CSVWriter
  • Всегда закрывайте писатель с помощью writer.close(), чтобы убедиться, что все данные записаны в файл
  • Вы можете настроить разделитель, символ кавычек и другие аспекты формата CSV

Имея эти основы, вы должны быть в состоянии интегрировать функциональность записи в CSV в свои Java-приложения.