Hvordan skrive til en CSV-fil i Java

1. Oversikt

I denne korte opplæringen skal vi lære hvordan du skriver til en CSV-fil ved hjelp av Java. CSV står for kommaseparerte verdier, og det er et vanlig format for å utføre massedataoverføring mellom systemer.

For å skrive CSV-filen vår bruker vi klasser i java.io pakke.

Vi snakker om spesialtegn og hvordan du skal håndtere dem. Vi målretter mot utdatafilen vår for å åpne i Microsoft Excel og Google Sheets.

Etter vårt Java-eksempel, vil vi ta en kort titt på noen tilgjengelige tredjepartsbiblioteker for arbeid med CSV-filer.

2. Skrive med PrintWriter

Vi skal bruke en PrintWriter for å skrive CSV-filen vår. For en mer detaljert titt på bruk java.io for å skrive til en fil, se vår artikkel om skriving til filer.

2.1. Skrive CSV

La oss først lage en metode for formatering av en enkelt datalinje, representert som en rekke Strings:

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

Før vi kaller denne metoden, la oss imidlertid bygge opp noen eksempler på data:

List dataLines = new ArrayList (); dataLines.add (ny streng [] {"John", "Doe", "38", "Kommentardata \ nEn annen linje med kommentardata"}); dataLines.add (ny String [] {"Jane", "Doe, Jr.", "19", "Hun sa \" Jeg blir sitert \ ""});

Og med de dataene i hånden, la oss konvertere hver rad med konverterToCSV og skriv det til en fil:

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

2.2. Håndtering av spesialtegn

I en CSV-fil er visse tegn problematiske, og som utviklere har vi sjelden total kontroll over kvaliteten på dataene våre. Så la oss se på hvordan du skal håndtere spesialtegn.

For eksempel vil vi fokusere på komma, anførselstegn og nye linjer. Felter som inneholder komma eller anførselstegn vil være omgitt av doble anførselstegn og doble anførselstegn vil bli unnslippe med doble anførselstegn. Vi vil eliminere nye linjer og erstatte dem hver med mellomrom.

Hvilke tegn som er et problem, og hvordan de skal håndteres, kan variere med brukssaken.

Våre konverterToCSV metoden kaller escapeSpecialCharacters metode på hvert stykke data når det bygger opp en String.

La oss implementere vår escapeSpecialCharacters metode nå:

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 eksemplet vårt, kan det å skrive en CSV-fil bli komplisert når vi begynner å tenke på spesialtegn og hvordan vi skal håndtere dem.

Heldigvis for oss, det er mange tredjepartsbiblioteker tilgjengelig for arbeid med CSV-filer og mange av dem håndterer disse spesialtegnene og andre unntakstilfeller som kan oppstå.

La oss ta en titt på noen av dem:

  • Apache Commons CSV: Apache's CSV-tilbud for å jobbe med CSV-filer
  • Åpen CSV: Et annet populært og aktivt vedlikeholdt CSV-bibliotek
  • Flatpack: Et CSV-bibliotek med åpen kildekode som utvikles aktivt
  • CSVeed: åpen kildekode og aktivt vedlikeholdt

4. Konklusjon

I denne raske artikkelen viste vi hvordan du skriver en CSV-fil ved hjelp av Java-filer PrintWriter klasse. Deretter diskuterte og håndterte vi spesialtegn i dataene som sendes ut.

Etter vårt vanlige Java-eksempel, så vi på en oversikt over tilgjengelige tredjepartsbiblioteker.

Eksempelkoden er tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found