Escrevendo Dados em Arquivos CSV Usando Java

JavaBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como escrever dados em arquivos CSV (Comma-Separated Values) usando Java. Arquivos CSV são um formato comum para armazenar dados tabulares e são amplamente utilizados para troca de dados entre diferentes aplicações.

Você usará a biblioteca OpenCSV, que fornece métodos simples para escrever e ler arquivos CSV em Java. Ao final deste laboratório, você terá criado um programa Java que pode escrever dados em um novo arquivo CSV e anexar dados adicionais a um arquivo existente.

Entendendo Arquivos CSV e Configurando o Projeto

CSV (Comma-Separated Values) é um formato de arquivo simples usado para armazenar dados tabulares. Cada linha em um arquivo CSV representa uma linha de dados, e os valores dentro de uma linha são separados por vírgulas. Por exemplo, um arquivo CSV contendo dados de alunos pode ter a seguinte aparência:

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

Vamos começar criando um projeto Maven simples para trabalhar com arquivos CSV. Maven é uma ferramenta de automação de construção que nos ajudará a gerenciar as dependências do nosso projeto.

  1. Primeiro, abra o terminal no WebIDE e navegue até o diretório do projeto:
cd ~/project/csv-writer
  1. Crie um novo arquivo chamado pom.xml no diretório do projeto. Este arquivo definirá a estrutura e as dependências do nosso projeto:
touch pom.xml
  1. Abra o arquivo pom.xml no editor WebIDE e adicione o seguinte conteúdo:
<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>

Este arquivo XML define nosso projeto e adiciona a biblioteca OpenCSV (versão 5.4) como uma dependência. OpenCSV fornece classes simples para ler e escrever arquivos CSV.

  1. Crie a estrutura de diretórios para o nosso código fonte Java:
mkdir -p src/main/java/com/example

Este comando cria a estrutura de diretórios Maven padrão para o código fonte Java.

Criando um Programa Simples de Escrita CSV

Agora que configuramos nosso projeto com a dependência OpenCSV, podemos criar um programa Java que escreve dados em um arquivo CSV.

  1. Crie um novo arquivo de classe Java chamado CSVWriterExample.java na estrutura de diretórios que criamos anteriormente:
touch src/main/java/com/example/CSVWriterExample.java
  1. Abra CSVWriterExample.java no editor WebIDE e adicione o seguinte código:
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();
        }
    }
}

Este código faz o seguinte:

  • Importa as classes necessárias da biblioteca OpenCSV e do pacote I/O do Java
  • Cria um objeto CSVWriter que escreverá em um arquivo chamado students.csv
  • Escreve uma linha de cabeçalho com os nomes dos campos
  • Escreve duas linhas de dados de alunos
  • Fecha o escritor para garantir que todos os dados sejam gravados no arquivo

O construtor CSVWriter tem cinco parâmetros:

  • FileWriter: Especifica o arquivo para escrever
  • Caractere separador: O caractere usado para separar os campos (o padrão é vírgula)
  • Caractere de citação: O caractere usado para citar os campos (o padrão é aspas duplas)
  • Caractere de escape: O caractere usado para escapar caracteres especiais (o padrão é barra invertida)
  • Fim de linha: O caractere usado para terminar as linhas (o padrão é nova linha)
  1. Compile o programa Java usando Maven:
cd ~/project/csv-writer
mvn compile

Este comando compila nosso código fonte Java usando o sistema de construção Maven.

Executando o Programa de Escrita CSV

Vamos executar nosso programa Java para criar o arquivo CSV e ver os resultados.

  1. Execute o programa Java compilado usando Maven:
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVWriterExample"

Se você vir uma mensagem de erro sobre o exec-maven-plugin, precisamos adicioná-lo ao nosso pom.xml:

  1. Abra pom.xml no editor WebIDE e atualize-o para incluir o 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. Agora execute o programa novamente:
mvn exec:java

Você deve ver a mensagem "CSV file created successfully!" na saída do terminal.

  1. Vamos verificar se nosso arquivo CSV foi criado e contém os dados esperados:
cat students.csv

A saída deve mostrar o conteúdo do arquivo CSV, que será algo como:

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

Observe que a saída inclui caracteres de aspas em torno de cada campo. Este é o comportamento padrão do OpenCSV, que ajuda a lidar com campos que contêm caracteres especiais como vírgulas.

Adicionando Dados a um Arquivo CSV Existente

Agora que criamos um arquivo CSV, vamos modificar nosso programa Java para anexar dados adicionais ao arquivo existente, em vez de sobrescrevê-lo.

  1. Crie um novo arquivo Java chamado CSVAppendExample.java:
touch src/main/java/com/example/CSVAppendExample.java
  1. Abra CSVAppendExample.java no editor WebIDE e adicione o seguinte código:
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();
        }
    }
}

Este código é semelhante ao nosso exemplo anterior, mas com duas diferenças importantes:

  • Criamos o FileWriter com um segundo parâmetro definido como true, o que o coloca no modo de anexação (append mode)
  • Não escrevemos uma linha de cabeçalho, pois o arquivo já possui uma
  1. Execute o programa para anexar dados ao nosso arquivo CSV existente:
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVAppendExample"
  1. Vamos verificar o conteúdo do nosso arquivo CSV agora:
cat students.csv

Você deve ver os dados originais mais os registros recém-anexados:

"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"

Como você pode ver, os novos dados foram adicionados ao final do arquivo sem perturbar o conteúdo existente.

  1. Vamos criar mais um exemplo que demonstra a escrita de arquivos CSV com separadores personalizados:
touch src/main/java/com/example/CSVCustomExample.java
  1. Abra CSVCustomExample.java no editor WebIDE e adicione o seguinte código:
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();
        }
    }
}

Este exemplo cria um arquivo CSV usando ponto e vírgula como separadores em vez de vírgulas, o que é comum em alguns países europeus, onde as vírgulas são usadas como separadores decimais.

  1. Execute o exemplo de separador personalizado:
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVCustomExample"
  1. Verifique o conteúdo do novo arquivo CSV:
cat students_semicolon.csv

Você deve ver o arquivo CSV com ponto e vírgula como separadores:

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

Resumo

Neste laboratório, você aprendeu a escrever dados em arquivos CSV usando Java com a biblioteca OpenCSV. Você conseguiu:

  1. Configurar um projeto Java com a dependência OpenCSV
  2. Criar um programa Java básico para escrever dados em um novo arquivo CSV
  3. Modificar o programa para anexar dados a um arquivo CSV existente
  4. Criar um escritor CSV personalizado com um caractere separador diferente

Essas habilidades são úteis para muitas aplicações, como exportação de dados, geração de relatórios e troca de dados entre sistemas. CSV é um formato amplamente utilizado devido à sua simplicidade e compatibilidade com software de planilha e ferramentas de análise de dados.

Alguns pontos-chave:

  • A classe CSVWriter do OpenCSV fornece uma maneira fácil de escrever arquivos CSV em Java
  • Para criar um novo arquivo CSV, use new FileWriter(filename) com o CSVWriter
  • Para anexar a um arquivo CSV existente, use new FileWriter(filename, true) com o CSVWriter
  • Sempre feche o escritor usando writer.close() para garantir que todos os dados sejam escritos no arquivo
  • Você pode personalizar o separador, o caractere de citação e outros aspectos do formato CSV

Com esses conceitos básicos, você deve ser capaz de incorporar recursos de escrita CSV em suas aplicações Java.