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.