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.
- Primeiro, abra o terminal no WebIDE e navegue até o diretório do projeto:
cd ~/project/csv-writer
- Crie um novo arquivo chamado
pom.xmlno diretório do projeto. Este arquivo definirá a estrutura e as dependências do nosso projeto:
touch pom.xml
- Abra o arquivo
pom.xmlno 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.
- 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.
- Crie um novo arquivo de classe Java chamado
CSVWriterExample.javana estrutura de diretórios que criamos anteriormente:
touch src/main/java/com/example/CSVWriterExample.java
- Abra
CSVWriterExample.javano 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
CSVWriterque escreverá em um arquivo chamadostudents.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)
- 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.
- 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:
- Abra
pom.xmlno 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>
- Agora execute o programa novamente:
mvn exec:java
Você deve ver a mensagem "CSV file created successfully!" na saída do terminal.
- 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.
- Crie um novo arquivo Java chamado
CSVAppendExample.java:
touch src/main/java/com/example/CSVAppendExample.java
- Abra
CSVAppendExample.javano 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
FileWritercom um segundo parâmetro definido comotrue, 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
- Execute o programa para anexar dados ao nosso arquivo CSV existente:
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVAppendExample"
- 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.
- Vamos criar mais um exemplo que demonstra a escrita de arquivos CSV com separadores personalizados:
touch src/main/java/com/example/CSVCustomExample.java
- Abra
CSVCustomExample.javano 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.
- Execute o exemplo de separador personalizado:
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVCustomExample"
- 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:
- Configurar um projeto Java com a dependência OpenCSV
- Criar um programa Java básico para escrever dados em um novo arquivo CSV
- Modificar o programa para anexar dados a um arquivo CSV existente
- 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
CSVWriterdo OpenCSV fornece uma maneira fácil de escrever arquivos CSV em Java - Para criar um novo arquivo CSV, use
new FileWriter(filename)com oCSVWriter - Para anexar a um arquivo CSV existente, use
new FileWriter(filename, true)com oCSVWriter - 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.



