Gravar Strings em Arquivo CSV em Java

Rupam Yadav 12 outubro 2023
  1. Usando PrintWriter para ler e gravar em um arquivo CSV em Java
  2. Usando a biblioteca OpenCSV para ler e gravar em um arquivo CSV em Java
Gravar Strings em 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 Yadav avatar Rupam Yadav avatar

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

Artigo relacionado - Java CSV

Artigo relacionado - Java String