Pela definição, CSV significa "Comma-separated Value", ou seja, são valores separados por virgula ou por qualquer outro separador. Mas na prática, o formato CSV permite o armazanamento de dados de uma tabela em um arquivo texto, sendo suportado pela maioria das planilhas eletrônicas e SGBD. Em nossa aplicação iremos criar um arquivo CSV com dados de uma tabela e importar dados de um arquivo CSV para a mesma tabela. Em posts posteriores criaremos aplicativos que façam a integração de arquivos CSVs com planilhas excel, xmls e banco de dados.
Sendo a tabela:
Vamos criar um método que gere um arquivo CSV. Segue o código:
//Para a execução das duas classes abaixo é importar algumas classes do
//Java.
Sendo a tabela:
| Nome | Telefone | Idade |
| Juliana | 6783-8490 | 23 |
| Tatiana | 6743-7480 | 45 |
| Janice | 6909-9380 | 21 |
Vamos criar um método que gere um arquivo CSV. Segue o código:
//Para a execução das duas classes abaixo é importar algumas classes do
//Java.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public void createCsvFile(){
//A estrutura try-catch é usada pois o objeto BufferedWriter exige que as
//excessões sejam tratadas
try{
//Criação de um buffer para a escrita em uma stream
BufferedWriter StrW = new BufferedWriter(new FileWriter("C:\\tabela.csv"));
//Escrita dos dados da tabela
StrW.write("Nome;Telefone;Idade\n");
StrW.write("Juliana;6783-8490;23\n");
StrW.write("Tatiana;6743-7480;45\n");
StrW.write("Janice;6909-9380;21");
//Fechamos o buffer
StrW.close();
}catch (FileNotFoundException ex)
{
ex.printStackTrace();
}catch (IOException e)
{
e.printStackTrace(); }
}
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public void createCsvFile(){
//A estrutura try-catch é usada pois o objeto BufferedWriter exige que as
//excessões sejam tratadas
try{
//Criação de um buffer para a escrita em uma stream
BufferedWriter StrW = new BufferedWriter(new FileWriter("C:\\tabela.csv"));
//Escrita dos dados da tabela
StrW.write("Nome;Telefone;Idade\n");
StrW.write("Juliana;6783-8490;23\n");
StrW.write("Tatiana;6743-7480;45\n");
StrW.write("Janice;6909-9380;21");
//Fechamos o buffer
StrW.close();
}catch (FileNotFoundException ex)
{
ex.printStackTrace();
}catch (IOException e)
{
e.printStackTrace(); }
}
public void readCsvFile(){
//A estrutura try-catch é usada pois o objeto BufferedWriter exige que as
//excessões sejam tratadas
try {
//Criação de um buffer para a ler de uma stream
BufferedReader StrR = new BufferedReader(new FileReader("c:\\tabela.csv"));
String Str;
String[] TableLine;
//Essa estrutura do looping while é clássica para ler cada linha
//do arquivo
while((Str = StrR.readLine())!= null){
//Aqui usamos o método split que divide a linha lida em um array de String
//passando como parametro o divisor ";".
TableLine = Str.split(";");
//O foreach é usadao para imprimir cada célula do array de String.
for (String cell : TableLine) {
System.out.print(cell+" ");
}
System.out.println("\n");
}
//Fechamos o buffer
StrR.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException ex){
ex.printStackTrace();
}
}
Como podemos perceber pelos métodos acima, manipular arquivos CSVs consiste apenas em conhecer algumas caracteristicas das classes String e System.IO do Java. Em posts posteriores veremos como integrar arquivos CSV com xml e banco de dados, assim como outros assuntos relacionados ao JAVA. E você, o que achou desse artigo? Deixe seu comentário, dúvida ou sugestão de novos posts. Até a próxima!!!
Muito bom, parabéns!
ResponderExcluirgostei...
ResponderExcluirMuito bom !! Ajudou bastante!!
ResponderExcluirshow, ajudou muito
ResponderExcluirPerfeito. Melhor matéria em que achei!
ResponderExcluirMuito bom !!!!! Perfeito, funcionou OK !!
ResponderExcluirGostaria de saber como fazer para pegar os registros do banco de dado!
ResponderExcluirBoa tarde. Obrigado pelo post.
ResponderExcluirFiz um while dentro do outro e o primeiro while não atualiza a linha. Poderia me dizer o que está errado, por favor?
package br.com.tamar.repositorio;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class ManipulaCSV {
//---------------------------------------------------------------------
public static void run(String validosCSV, String recadastradosCSV) {
//String validosCSV = "C:\\Users\\efraim\\Downloads\\lista_Emails_Validos.csv";
//String recadastradosCSV = "C:\\Users\\efraim\\Downloads\\lista_Recadastrados.csv";
BufferedReader brRecad = null;
BufferedReader brValid = null;
String linhaRecad = "";
String linhaValid = "";
String csvDivisor = ";";
int contValid = 0;
int contRecad = 0;
try {
//Lendo os CSVs
brValid = new BufferedReader(new FileReader(validosCSV));
brRecad = new BufferedReader(new FileReader(recadastradosCSV));
while ((linhaValid = brValid.readLine()) != null) {
String[] valido = linhaValid.split(csvDivisor);
while ((linhaRecad = brRecad.readLine()) != null) {
String[] recadastrado = linhaRecad.split(csvDivisor);
if (valido[0].equalsIgnoreCase(recadastrado[0])) {
//System.out.println(valido[0]);
}
System.out.println(linhaValid);
contRecad ++;
}
contValid ++;
}
//System.out.println("contValid=" + contValid);
//System.out.println("contRecad=" + contRecad);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (brValid != null) {
try {
brValid.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}