Uvod u Apache Commons CSV
1. Pregled
Apache Commons CSV knjižnica ima mnogo korisnih značajki za stvaranje i čitanje CSV datoteka.
U ovom brzom vodiču vidjet ćemo kako koristiti ovu knjižnicu pokazujući jednostavan primjer.
2. Ovisnost Mavena
Za početak ćemo uvesti najnoviju verziju ove knjižnice pomoću Mavena:
org.apache.commons commons-csv 1.4
Idite ovdje da biste provjerili ima li najnovije verzije ove knjižnice.
3. Čitanje CSV datoteke
Razmotrite sljedeću CSV datoteku pod nazivom book.csv koja sadrži atribute knjige:
autor, naslov Dan Simmons, Hyperion Douglas Adams, Autostoperski vodič kroz galaksiju
Pogledajmo kako to možemo pročitati:
Karta AUTHOR_BOOK_MAP = nova HashMap () {{put ("Dan Simmons", "Hyperion"); put ("Douglas Adams", "Autostoperski vodič kroz galaksiju"); }}); Niz [] GLAVE = {"autor", "naslov"}; @Test public void givenCSVFile_whenRead_thenContentsAsExpected () baca IOException {Reader in = new FileReader ("book.csv"); Iterable records = CSVFormat.DEFAULT .withHeader (HEADERS) .withFirstRecordAsHeader () .parse (in); za (CSVRecord zapis: zapisi) {Autor niza = record.get ("autor"); Naslov niza = record.get ("naslov"); assertEquals (AUTHOR_BOOK_MAP.get (autor), naslov); }}
Čitamo zapise CSV datoteke nakon preskakanja prvog retka jer je to zaglavlje.
Postoje različite vrste CSVFormat navodeći format CSV datoteke, čiji primjer možete vidjeti u sljedećem odlomku.
4. Stvaranje CSV datoteke
Pogledajmo kako možemo stvoriti istu CSV datoteku kao gore:
public void createCSVFile () baca IOException {FileWriter out = new FileWriter ("book_new.csv"); probajte (CSVPrinter printer = novi CSVPrinter (van, CSVFormat.DEFAULT .withHeader (HEADERS))) {AUTHOR_BOOK_MAP.forEach ((autor, naslov) -> {printer.printRecord (autor, naslov);}); }}
Nova CSV datoteka stvorit će se s odgovarajućim zaglavljima jer smo ih naveli u našem CSVFormat deklaracija.
5. Zaglavlja i stupci za čitanje
Postoje različiti načini čitanja i pisanja zaglavlja. Slično tome, postoje različiti načini čitanja vrijednosti stupaca.
Krenimo redom kroz njih:
5.1. Pristup stupcima indeksom
Ovo je najosnovniji način čitanja vrijednosti stupaca. To se može koristiti kada zaglavlja CSV datoteka nisu poznata:
Čitač u = novi FileReader ("book.csv"); Iterable evidencije = CSVFormat.DEFAULT.parse (in); za (CSVRecord zapis: zapisi) {String columnOne = record.get (0); Niz stringTwo = record.get (1); }
5.2. Pristup stupcima unaprijed definiranim zaglavljima
Ovo je intuitivniji način pristupa stupcima u usporedbi s pristupom pomoću indeksa:
Iterobilni zapisi = CSVFormat.DEFAULT .withHeader ("autor", "naslov"). Parse (in); za (CSVRecord zapis: zapisi) {Autor niza = record.get ("autor"); Naslov niza = record.get ("naslov"); }
5.3. Korištenje enuma kao zaglavlja
Koristeći Žice za pristup vrijednostima stupca može biti sklono pogreškama. Korištenje Enumsa umjesto stringova učinit će kôd standardiziranim i lakšim za razumijevanje:
enum BookHeaders {autor, naslov} Iterable records = CSVFormat.DEFAULT .withHeader (BookHeaders.class) .parse (in); za (CSVRecord zapis: zapisi) {Autor niza = record.get (BookHeaders.author); Naslov niza = record.get (BookHeaders.title); }
5.4. Preskakanje linije zaglavlja
CSV datoteke obično sadrže zaglavlja u prvom retku. Stoga ga je u većini slučajeva sigurno preskočiti i početi čitati iz drugog reda.
Ovo će automatski prepoznati zaglavlja za pristup vrijednostima stupca:
Iterobilni zapisi = CSVFormat.DEFAULT .withFirstRowAsHeader (). Parse (in); za (CSVRecord zapis: zapisi) {Autor niza = record.get ("autor"); Naslov niza = record.get ("naslov"); }
5.5. Stvaranje datoteke sa zaglavljima
Slično tome, možemo stvoriti CSV datoteku s prvim retkom koji sadrži zaglavlja:
FileWriter out = novi FileWriter ("book_new.csv"); CSVPrinter printer = CSVFormat.DEFAULT .withHeader ("autor", "naslov"). Ispis (out);
6. Zaključak
Korištenje Apacheove Commons CSV biblioteke predstavili smo kroz jednostavan primjer. Više o knjižnici možete pročitati ovdje.
Kôd za ovaj članak dostupan je na Githubu.