Gravar Strings em Arquivo CSV em Java
-
Usando
PrintWriter
para ler e gravar em um arquivo CSV em Java -
Usando a biblioteca
OpenCSV
para ler e gravar em um arquivo CSV em Java
CSV significa Comma Separated Values
; é um formato comumente usado para transferências de dados volumosos entre sistemas. Existem também muitas bibliotecas de analisador a serem usadas junto com o Java para poder trabalhar com este formato.
Usando PrintWriter
para ler e gravar em um arquivo CSV em Java
A função PrinterWriter
em Java é uma classe de gravador usada para imprimir a representação formatada de objetos em um fluxo de saída de texto. Criamos um objeto writer
passando um novo arquivo denominado test.csv
como destino para o gravador. Aqui, o objeto sb
anexa uma string especificada à seqüência de caracteres.
O método write()
na instância writer
grava o conteúdo textual no stream. O método flush()
descarrega o conteúdo no arquivo e o método close()
fecha permanentemente o fluxo. Também podemos ler o conteúdo do arquivo test.csv
.
O método readCSVFile()
é chamado na instância da classe TestCSV
. Aqui, criamos uma instância da classe Scanner
com valores do arquivo especificado. Ele divide os dados em tokens usando um padrão de delimitador. O hasNextLine()
retorna verdadeiro se o scanner tiver outra linha de entrada. Assim, lemos cada linha de dados de token usando o método next()
e os armazenamos em um array, finalmente imprimindo a saída.
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class TestCSV {
public static void main(String args[]) {
try (PrintWriter writer = new PrintWriter(new File("test.csv"))) {
StringBuilder sb = new StringBuilder();
sb.append("id");
sb.append(',');
sb.append("Name");
sb.append(',');
sb.append("Address");
sb.append('\n');
sb.append("101");
sb.append(',');
sb.append("John Doe");
sb.append(',');
sb.append("Las Vegas");
sb.append('\n');
writer.write(sb.toString());
writer.close();
System.out.println("done!");
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
}
TestCSV testCSV = new TestCSV();
testCSV.readCSVFile();
}
public void readCSVFile() {
List<List<String>> records = new ArrayList<>();
try (Scanner scanner = new Scanner(new File("test.csv"));) {
while (scanner.hasNextLine()) {
records.add(getRecordFromLine(scanner.nextLine()));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
System.out.println(records.toString());
}
private List<String> getRecordFromLine(String line) {
List<String> values = new ArrayList<String>();
try (Scanner rowScanner = new Scanner(line)) {
rowScanner.useDelimiter(",");
while (rowScanner.hasNext()) {
values.add(rowScanner.next());
}
}
return values;
}
}
Resultado
done ![[ id, Name, Address ], [ 101, John Doe, Las Vegas ]]
Usando a biblioteca OpenCSV
para ler e gravar em um arquivo CSV em Java
A dependência do maven para esta biblioteca é fornecida abaixo:
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.4</version>
</dependency>
O OpenCsv
é uma biblioteca de analisador simples para java; ele tem um conjunto de classes OpenCsv que usamos para ler e gravar em um arquivo CSV. No método main()
, primeiro chamamos o método para gravar em um arquivo CSV usando a classe CSVWriter
. Esta classe é usada para gravar dados CSV na implementação do gravador.
Criamos uma instância writer
de CSVWriter
e chamamos a função writeNext()
neste objeto para gerar um arquivo CSV com dados de um array de strings separados por um delimitador. O método close()
fecha o fluxo do gravador.
Para ler os dados do arquivo que criamos no formato CSV, chamamos o método readCSVFile
no objeto de classe principal, onde analisamos o arquivo CSV. Para ler todos os registros em uma lista de uma vez, usamos o método readAll()
. Fazemos um loop em cada registro e o imprimimos.
import com.opencsv.CSVReader;
import com.opencsv.CSVWriter;
import com.opencsv.exceptions.CsvException;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
public class CSVLibrary {
public static void main(String args[]) {
CSVLibrary csvLibrary = new CSVLibrary();
csvLibrary.writeToCsv();
csvLibrary.readCSVFile();
}
public void writeToCsv() {
String csv = "data.csv";
try {
CSVWriter writer = new CSVWriter(new FileWriter(csv));
String[] record = "2,Virat,Kohli,India,30".split(",");
writer.writeNext(record);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void readCSVFile() {
CSVReader reader = null;
try {
reader = new CSVReader(new FileReader("data.csv"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
List<String[]> allRows = null;
try {
allRows = reader.readAll();
} catch (IOException e) {
e.printStackTrace();
} catch (CsvException e) {
e.printStackTrace();
}
for (String[] row : allRows) {
System.out.println(Arrays.toString(row));
}
}
}
Resultado
[2, Virat, Kohli, India, 30]
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn