Sådan skriver du til en CSV-fil i Java

1. Oversigt

I denne korte vejledning skal vi lære hvordan man skriver til en CSV-fil ved hjælp af Java. CSV står for kommaseparerede værdier, og det er et almindeligt format til at udføre en massedataoverførsel mellem systemer.

For at skrive vores CSV-fil bruger vi klasser i java.io pakke.

Vi taler om specialtegn og hvordan man håndterer dem. Vi målretter mod vores outputfil at åbne i Microsoft Excel og Google Sheets.

Efter vores Java-eksempel vil vi tage et kort kig på nogle tilgængelige tredjepartsbiblioteker til arbejde med CSV-filer.

2. Skrivning med PrintWriter

Vi skal bruge en PrintWriter til at skrive vores CSV-fil. For et mere detaljeret kig på brugen java.io at skrive til en fil, se vores artikel om at skrive til filer.

2.1. Skrivning af CSV

Lad os først oprette en metode til formatering af en enkelt datalinje, repræsenteret som en matrix af Snors:

public String convertToCSV (String [] data) {return Stream.of (data) .map (this :: escapeSpecialCharacters) .collect (Collectors.joining (",")); }

Før vi kalder denne metode, lad os dog opbygge nogle eksempler på data:

Liste dataLines = ny ArrayList (); dataLines.add (ny streng [] {"John", "Doe", "38", "Kommentardata \ nEn anden linje med kommentardata"}); dataLines.add (ny String [] {"Jane", "Doe, Jr.", "19", "Hun sagde \" Jeg citeres \ ""});

Og med disse data i hånden, lad os konvertere hver række med konverterToCSV og skriv det til en fil:

offentlig ugyldighed givenDataArray_whenConvertToCSV_thenOutputCreated () kaster IOException {File csvOutputFile = ny fil (CSV_FILE_NAME); prøv (PrintWriter pw = ny PrintWriter (csvOutputFile)) {dataLines.stream () .map (dette :: convertToCSV) .forEach (pw :: println); } assertTrue (csvOutputFile.exists ()); }

2.2. Håndtering af specialtegn

I en CSV-fil er visse tegn problematiske, og som udviklere har vi sjældent total kontrol over kvaliteten af ​​vores data. Så lad os nu se på, hvordan man håndterer specialtegn.

For vores eksempel vil vi fokusere på kommaer, citater og nye linjer. Felter, der indeholder kommaer eller anførselstegn, er omgivet af dobbelt anførselstegn, og dobbelt anførselstegn undgås med dobbelt anførselstegn. Vi fjerner nye linjer og erstatter dem hver med mellemrum.

Hvilke tegn der er et problem, og hvordan de skal håndteres, kan variere efter brugen.

Vores konverterToCSV metoden kalder escapeSpecialCharacters metode på hvert stykke data, da det bygger op a Snor.

Lad os implementere vores escapeSpecialCharacters metode nu:

public String escapeSpecialCharacters (String data) {String escapedData = data.replaceAll ("\ R", ""); hvis (data.contains (",") || data.contains ("\" ") || data.contains (" '")) {data = data.replace (" \ "", "\" \ "" ); escapedData = "\" "+ data +" \ ""; } returner escapedData; }

3. Tredjepartsbiblioteker

Som vi så med vores eksempel, kan det være kompliceret at skrive en CSV-fil, når vi begynder at tænke på specialtegn, og hvordan vi håndterer dem.

Heldigvis for os, der er mange tredjepartsbiblioteker tilgængelige til arbejde med CSV-filer og mange af dem håndterer disse specialtegn og andre ekstraordinære tilfælde, der kan forekomme.

Lad os se på et par af dem:

  • Apache Commons CSV: Apache's CSV-tilbud til arbejde med CSV-filer
  • Åben CSV: Et andet populært og aktivt vedligeholdt CSV-bibliotek
  • Flatpack: Et open source CSV-bibliotek udvikles aktivt
  • CSVeed: Open source og aktivt vedligeholdt

4. Konklusion

I denne hurtige artikel viste vi, hvordan man skriver en CSV-fil ved hjælp af Java'er PrintWriter klasse. Dernæst diskuterede og håndterede vi specialtegn i de data, der blev output.

Efter vores almindelige Java-eksempel kiggede vi på en oversigt over tilgængelige tredjepartsbiblioteker.

Eksempelkoden er tilgængelig på GitHub.