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.