Kako pisati u CSV datoteku na Javi

1. Pregled

U ovom kratkom uputstvu naučit ćemo kako pisati u CSV datoteku pomoću Jave. CSV označava vrijednosti odvojene zarezom i to je uobičajeni format za skupni prijenos podataka između sustava.

Za pisanje CSV datoteke koristit ćemo nastavu u java.io paket.

Razgovarat ćemo o posebnim likovima i kako postupati s njima. Mi ćemo ciljati našu izlaznu datoteku otvoriti u Microsoft Excelu i Google tablicama.

Nakon našeg primjera Java, kratko ćemo pogledati neke dostupne biblioteke trećih strana za rad s CSV datotekama.

2. Pisanje sa PrintWriter

Koristit ćemo a PrintWriter za pisanje naše CSV datoteke. Za detaljniji uvid u upotrebu java.io za pisanje u datoteku pogledajte naš članak o upisivanju u datoteke.

2.1. Pisanje CSV-a

Prvo, kreirajmo metodu formatiranja jednog retka podataka, predstavljenog kao niz Nizs:

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

Prije nego što pozovemo ovu metodu, napravimo sljedeći primjer podataka:

Popis podataka podataka = novi ArrayList (); dataLines.add (novi String [] {"John", "Doe", "38", "Podaci o komentaru \ nDruga linija podataka o komentarima"}); dataLines.add (novi String [] {"Jane", "Doe, Jr.", "19", "Rekla je \" Citiram me \ ""});

A s tim podacima u ruci, pretvorimo svaki redak s convertToCSV i napišite ga u datoteku:

javna praznina givenDataArray_whenConvertToCSV_thenOutputCreated () baca IOException {Datoteka csvOutputFile = nova datoteka (CSV_FILE_NAME); probajte (PrintWriter pw = novi PrintWriter (csvOutputFile)) {dataLines.stream () .map (this :: convertToCSV) .forEach (pw :: println); } assertTrue (csvOutputFile.exists ()); }

2.2. Rukovanje posebnim znakovima

U CSV datoteci određeni su znakovi problematični i kao programeri rijetko imamo potpunu kontrolu nad kvalitetom naših podataka. Pa pogledajmo sada kako postupati sa posebnim znakovima.

U našem ćemo se primjeru usredotočiti na zareze, citate i nove retke. Polja koja sadrže zareze ili navodnike bit će okružena dvostrukim navodnicima, a dvostruki navodnici bježat će dvostrukim navodnicima. Eliminirat ćemo nove linije i zamijeniti ih razmacima.

Koji su znakovi problem i kako treba postupati s njima mogu se razlikovati ovisno o slučaju upotrebe.

Naše convertToCSV metoda poziva escapeSpecialCharacters metoda na svakom komadu podataka dok gradi a Niz.

Provedimo svoje escapeSpecialCharacters metoda sada:

javni String escapeSpecialCharacters (podaci niza) {String escapedData = data.replaceAll ("\ R", ""); if (data.contens (",") || data.contens ("\" ") || data.contains (" '")) {data = data.replace (" \ "", "\" \ "" ); escapedData = "\" "+ podaci +" \ ""; } povratak escapedData; }

3. Knjižnice trećih strana

Kao što smo vidjeli na našem primjeru, pisanje CSV datoteke može postati komplicirano kad počnemo razmišljati o posebnim znakovima i načinu s njima.

Srećom po nas, za rad s CSV datotekama dostupne su mnoge biblioteke trećih strana i mnogi od njih obrađuju ove posebne znakove i druge iznimne slučajeve koji se mogu dogoditi.

Pogledajmo nekoliko njih:

  • Apache Commons CSV: Apacheova CSV ponuda za rad s CSV datotekama
  • Otvoreni CSV: Još jedna popularna i aktivno održavana CSV biblioteka
  • Flatpack: Aktivno se razvija CSV biblioteka otvorenog koda
  • CSVeed: Open-source i aktivno se održava

4. Zaključak

U ovom kratkom članku pokazali smo kako napisati CSV datoteku pomoću Jave PrintWriter razred. Zatim smo razgovarali i obrađivali posebne znakove u podacima koji se izlažu.

Nakon našeg običnog primjera Jave, pogledali smo pregled dostupnih biblioteka trećih strana.

Primjer koda dostupan je na GitHubu.