Hogyan kell írni CSV fájlba Java-ban

1. Áttekintés

Ebben a rövid bemutatóban megtanuljuk hogyan kell írni CSV fájlba a Java használatával. A CSV a vesszővel elválasztott értékeket jelenti, és ez egy általános formátum a rendszerek közötti tömeges adatátvitelhez.

A CSV fájl megírásához osztályokat fogunk használni a java.io csomag.

Beszélünk speciális karakterekről és hogyan kell kezelni őket. Megcélozzuk a kimeneti fájlunkat megnyitni a Microsoft Excel és a Google Táblázatokban.

Java példánk után röviden megnézzük néhány elérhető harmadik féltől származó könyvtár a CSV-fájlokkal való munkavégzéshez.

2. Írás vele PrintWriter

Használjuk a PrintWriter a CSV fájlunk megírásához. A használat részletesebb áttekintéséhez java.io fájlba való íráshoz olvassa el a fájlokba írás cikkünket.

2.1. A CSV megírása

Először hozzunk létre egy módszert egyetlen adatsor formázására, amelyet tömbként ábrázolunk Húrs:

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

Mielőtt ezt a módszert meghívnánk, készítsünk néhány példát:

List dataLines = new ArrayList (); dataLines.add (új karakterlánc [] {"John", "Doe", "38", "Megjegyzés adatai \ nA megjegyzés adatainak másik sora"}); dataLines.add (új karakterlánc [] {"Jane", "Doe, Jr.", "19", "Azt mondta \" engem idéznek \ ""});

És ha ez az adat a kezében van, konvertáljuk az egyes sorokat convertToCSV és írd be egy fájlba:

public void givenDataArray_whenConvertToCSV_thenOutputCreated () dobja az IOException {File csvOutputFile = new File (CSV_FILE_NAME); próbáld meg (PrintWriter pw = new PrintWriter (csvOutputFile)) {dataLines.stream () .map (this :: convertToCSV) .forEach (pw :: println); } assertTrue (csvOutputFile.exists ()); }

2.2. Speciális karakterek kezelése

A CSV fájlban bizonyos karakterek problémásak, és fejlesztőként ritkán van teljes ellenőrzésünk az adatok minősége felett. Tehát most nézzük meg, hogyan kell kezelni a speciális karaktereket.

Példánkban vesszőkre, idézőjelekre és új sorokra fogunk összpontosítani. A vesszőket vagy idézőjeleket tartalmazó mezőket dupla idézőjelek veszik körül, a dupla idézőjeleket pedig kettős idézőjelek kerülik el. Megszüntetjük az új sorokat, és mindegyiket helyettesítjük szóközzel.

Az, hogy mely karakterek jelentenek problémát, és hogyan kell kezelni őket, a használati esettől függően változhat.

A mi convertToCSV metódus a escapeSpecialCharacters módszer minden adathoz, amint felépül a Húr.

Vezessük be a mi escapeSpecialCharacters módszer most:

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

3. Harmadik fél könyvtárai

Amint a példánkon láttuk, a CSV fájl írása bonyolulttá válhat, amikor elkezdünk gondolkodni a speciális karaktereken és azok kezelésén.

Szerencsénkre, sok harmadik féltől származó könyvtár áll rendelkezésre a CSV-fájlokkal való együttműködéshez és közülük sokan kezelik ezeket a speciális karaktereket és más előforduló eseteket.

Vessünk egy pillantást néhányukra:

  • Apache Commons CSV: Apache CSV-ajánlata a CSV-fájlokkal való együttműködéshez
  • Nyílt CSV: Egy másik népszerű és aktívan karbantartott CSV könyvtár
  • Flatpack: Nyílt forráskódú CSV könyvtár aktív fejlesztés alatt
  • CSVeed: Nyílt forráskódú és aktívan karbantartott

4. Következtetés

Ebben a rövid cikkben bemutattuk, hogyan kell CSV-fájlt írni a Java-k segítségével PrintWriter osztály. Ezután megvitattuk és kezeljük a kimenő adatok speciális karaktereit.

Egyszerű Java példánk után áttekintettük a rendelkezésre álló harmadik fél könyvtárait.

A példa kód elérhető a GitHubon.