Scrivi stringhe su file CSV in Java
-
Utilizzo di
PrintWriter
per leggere e scrivere in un file CSV in Java -
Utilizzo della libreria
OpenCSV
per leggere e scrivere in un 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]
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