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.