Scrivi stringhe su file CSV in Java

Rupam Yadav 12 ottobre 2023
  1. Utilizzo di PrintWriter per leggere e scrivere in un file CSV in Java
  2. Utilizzo della libreria OpenCSV per leggere e scrivere in un file CSV in Java
Scrivi stringhe su file CSV in Java

CSV sta per Comma Separated Values; è un formato comunemente usato per trasferimenti di dati voluminosi tra sistemi. Ci sono anche molte librerie di parser da usare insieme a Java per poter lavorare con questo formato.

Utilizzo di PrintWriter per leggere e scrivere in un file CSV in Java

La funzione PrinterWriter in Java è una classe writer utilizzata per stampare rappresentazioni formattate di oggetti su un flusso di output di testo. Creiamo un oggetto writer passando un nuovo file chiamato test.csv come destinazione per il writer. Qui, l’oggetto sb aggiunge una stringa specificata alla sequenza di caratteri.

Il metodo write() sull’istanza writer scrive il contenuto testuale nel flusso. Il metodo flush() scarica il contenuto nel file e il metodo close() chiude lo stream in modo permanente. Possiamo anche leggere il contenuto del file test.csv.

Il metodo readCSVFile() viene chiamato sull’istanza della classe TestCSV. Qui abbiamo creato un’istanza della classe Scanner con i valori del file specificato. Suddivide i dati in token utilizzando un modello delimitatore. Il hasNextLine() restituisce true se lo scanner ha un’altra riga di input. Pertanto, leggiamo ogni riga di dati del token utilizzando il metodo next() e la memorizziamo in un array, stampando infine l’output.

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;
  }
}

Produzione

done ![[ id, Name, Address ], [ 101, John Doe, Las Vegas ]]

Utilizzo della libreria OpenCSV per leggere e scrivere in un file CSV in Java

La dipendenza di Maven per questa libreria è riportata di seguito:

 <dependency>
      <groupId>com.opencsv</groupId>
      <artifactId>opencsv</artifactId>
      <version>5.4</version>
 </dependency>

L’OpenCsv è una semplice libreria di parser per java; ha un insieme di classi OpenCsv che usiamo per leggere e scrivere in un file CSV. Nel metodo main(), chiamiamo prima il metodo per scrivere su un file CSV usando la classe CSVWriter. Questa classe viene utilizzata per scrivere dati CSV nell’implementazione del writer.

Creiamo un’istanza writer di CSVWriter e chiamiamo la funzione writeNext() su questo oggetto per generare un file CSV con dati da un array di stringhe separate mediante un delimitatore. Il metodo close() chiude il flusso del writer.

Per leggere i dati dal file che abbiamo creato in formato CSV, chiamiamo il metodo readCSVFile sull’oggetto della classe principale, dove analizziamo il file CSV. Per leggere tutti i record in una lista in una volta, usiamo il metodo readAll(). Facciamo un bucle su ogni record e lo stampiamo.

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));
    }
  }
}

Produzione

[2, Virat, Kohli, India, 30]
Autore: Rupam Yadav
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

Articolo correlato - Java CSV

Articolo correlato - Java String