Ako písať do súboru CSV v jazyku Java

1. Prehľad

V tejto krátkej príručke sa naučíme ako písať do súboru CSV pomocou Java. CSV znamená Comma-Separated-Values ​​a je to bežný formát pre hromadný prenos dát medzi systémami.

Na napísanie nášho súboru CSV použijeme triedy v java.io balíček.

Povieme si o špeciálnych postavách a ako s nimi zachádzať. Zacielime na náš výstupný súbor otvoriť v Microsoft Excel a Tabuľkách Google.

Po našom príklade Java sa krátko pozrieme na niektoré dostupné knižnice tretích strán na prácu so súbormi CSV.

2. Písanie s PrintWriter

Použijeme a PrintWriter za napísanie nášho súboru CSV. Pre podrobnejší pohľad na použitie java.io Ak chcete zapísať do súboru, prečítajte si náš článok o zapisovaní do súborov.

2.1. Písanie CSV

Najskôr si vytvorme metódu na formátovanie jedného riadku údajov predstavovaného ako pole Strings:

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

Skôr než zavoláme túto metódu, poďme si ďalej zostaviť niekoľko príkladov údajov:

List dataLines = new ArrayList (); dataLines.add (nový reťazec [] {"John", "Doe", "38", "údaje komentárov \ nďalší riadok údajov komentárov"}); dataLines.add (nový reťazec [] {"Jane", "Doe, Jr.", "19", "povedala \" budem citovaný \ ""});

A keď máme tieto údaje v rukách, preveďme každý riadok pomocou convertToCSV a napíš to do súboru:

public void givenDataArray_whenConvertToCSV_thenOutputCreated () vyvolá IOException {File csvOutputFile = nový súbor (CSV_FILE_NAME); try (PrintWriter pw = new PrintWriter (csvOutputFile)) {dataLines.stream () .map (this :: convertToCSV) .forEach (pw :: println); } assertTrue (csvOutputFile.exists ()); }

2.2. Zaobchádzanie so špeciálnymi znakmi

V súbore CSV sú niektoré znaky problematické a ako vývojári máme zriedka úplnú kontrolu nad kvalitou našich údajov. Pozrime sa teda teraz na to, ako zaobchádzať so špeciálnymi znakmi.

V našom príklade sa zameriame na čiarky, úvodzovky a nové riadky. Polia obsahujúce čiarky alebo úvodzovky budú obklopené dvojitými úvodzovkami a dvojitým úvodzovkám uniknú dvojité úvodzovky. Odstránime nové riadky a nahradíme ich každý medzerami.

Ktoré znaky spôsobujú problém a ako by sa s nimi malo zaobchádzať, sa môžu líšiť v závislosti od prípadu použitia.

Náš convertToCSV metóda volá escapeSpecialCharacter metóda na každom údaji pri jeho vytváraní a String.

Realizujme naše escapeSpecialCharacter metóda teraz:

public String escapeSpecialCharacter (String data) {String escapedData = data.replaceAll ("\ R", ""); if (data.contains (",") || data.contains ("\" ") || data.contains (" '")) {data = data.replace (" \ "", "\" \ "" ); escapedData = "\" "+ dáta +" \ ""; } návrat escapedData; }

3. Knižnice tretích strán

Ako sme videli na našom príklade, písanie súboru CSV sa môže skomplikovať, keď začneme uvažovať o špeciálnych znakoch a o tom, ako s nimi zaobchádzať.

Našťastie pre nás, pre prácu so súbormi CSV je k dispozícii veľa knižníc tretích strán a veľa z nich spracováva tieto špeciálne znaky a ďalšie výnimočné prípady, ktoré sa môžu vyskytnúť.

Pozrime sa na niekoľko z nich:

  • Apache Commons CSV: Ponuka CSV spoločnosti Apache na prácu so súbormi CSV
  • Open CSV: Ďalšia populárna a aktívne udržiavaná knižnica CSV
  • Flatpack: Knižnica CSV s otvoreným zdrojovým kódom sa aktívne vyvíja
  • CSVeed: Open-source a aktívne udržiavaný

4. Záver

V tomto rýchlom článku sme si ukázali, ako napísať súbor CSV pomocou jazyka Java PrintWriter trieda. Ďalej sme diskutovali a zaobchádzali so špeciálnymi znakmi vo výstupných dátach.

Po našom príklade Java sme sa pozreli na prehľad dostupných knižníc tretích strán.

Vzorový kód je k dispozícii na serveri GitHub.


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