Introduksjon til Apache Commons CSV

1. Oversikt

Apache Commons CSV-bibliotek har mange nyttige funksjoner for å opprette og lese CSV-filer.

I denne raske opplæringen vil vi se hvordan du bruker dette biblioteket ved å vise et enkelt eksempel.

2. Maven avhengighet

For å starte, vil vi importere den nyeste versjonen av dette biblioteket ved hjelp av Maven:

 org.apache.commons commons-csv 1.4 

For å se etter den nyeste versjonen av dette biblioteket - gå hit.

3. Lese en CSV-fil

Vurder følgende CSV-fil kalt book.csv som inneholder attributtene til en bok:

forfatter, tittel Dan Simmons, Hyperion Douglas Adams, The Hitchhiker's Guide to the Galaxy

La oss se hvordan vi kan lese det:

Kart AUTHOR_BOOK_MAP = ny HashMap () {{put ("Dan Simmons", "Hyperion"); put ("Douglas Adams", "The Hitchhiker's Guide to the Galaxy"); }}); Streng [] HEADERS = {"forfatter", "tittel"}; @Test offentlig ugyldig gittCSVFile_whenRead_thenContentsAsExpected () kaster IOException {Reader i = ny FileReader ("book.csv"); Iterable poster = CSVFormat.DEFAULT .withHeader (HEADERS) .withFirstRecordAsHeader () .parse (in); for (CSVRecord-post: poster) {Stringforfatter = record.get ("forfatter"); Streng tittel = record.get ("tittel"); assertEquals (AUTHOR_BOOK_MAP.get (forfatter), tittel); }}

Vi leser postene til en CSV-fil etter å ha hoppet over den første linjen, siden den er overskriften.

Det finnes forskjellige typer CSVFormat spesifisere formatet på CSV-filen, et eksempel på det du kan se i neste avsnitt.

4. Opprette en CSV-fil

La oss se hvordan vi kan opprette den samme CSV-filen som ovenfor:

offentlig tomrom createCSVFile () kaster IOException {FileWriter ut = ny FileWriter ("book_new.csv"); prøv (CSVPrinter-skriver = ny CSVPrinter (ut, CSVFormat.DEFAULT .withHeader (HEADERS))) {AUTHOR_BOOK_MAP.forEach ((forfatter, tittel) -> {printer.printRecord (forfatter, tittel);}); }}

Den nye CSV-filen vil bli opprettet med de aktuelle overskriftene fordi vi har spesifisert dem i vår CSVFormat erklæring.

5. Overskrifter og lesekolonner

Det er forskjellige måter å lese og skrive overskrifter på. På samme måte er det forskjellige måter å lese kolonneverdier på.

La oss gå gjennom dem en etter en:

5.1. Tilgang til kolonner etter indeks

Dette er den mest grunnleggende måten å lese kolonneverdier på. Dette kan brukes når topptekstene for CSV-filene ikke er kjent:

Leser i = ny FileReader ("book.csv"); Iterable poster = CSVFormat.DEFAULT.parse (in); for (CSVRecord-post: poster) {StrengkolonneOne = record.get (0); Streng columnTwo = record.get (1); }

5.2. Tilgang til kolonner med forhåndsdefinerte overskrifter

Dette er en mer intuitiv måte å få tilgang til kolonner i forhold til tilgang med indekser:

Iterable poster = CSVFormat.DEFAULT .withHeader ("forfatter", "tittel"). Parse (in); for (CSVRecord-post: poster) {Stringforfatter = record.get ("forfatter"); Streng tittel = record.get ("tittel"); }

5.3. Bruke Enums som overskrifter

Ved hjelp av Strenger for tilgang til kolonneverdier kan være utsatt for feil. Ved å bruke Enums i stedet for Strings vil koden bli mer standardisert og lettere å forstå:

enum BookHeaders {author, title} Iterable records = CSVFormat.DEFAULT .withHeader (BookHeaders.class) .parse (in); for (CSVRecord-post: poster) {Stringforfatter = record.get (BookHeaders.author); Stringtittel = record.get (BookHeaders.title); }

5.4. Hopper over topplinjen

Vanligvis inneholder CSV-filer overskrifter i første linje. Derfor er det i de fleste tilfeller trygt å hoppe over det og begynne å lese fra andre rad.

Dette vil automatisk oppdage overskrifter tilgang til kolonneverdier:

Iterable poster = CSVFormat.DEFAULT .withFirstRowAsHeader (). Parse (in); for (CSVRecord-post: poster) {Stringforfatter = record.get ("forfatter"); Streng tittel = record.get ("tittel"); }

5.5. Opprette en fil med overskrifter

På samme måte kan vi opprette en CSV-fil med den første linjen som inneholder overskriftene:

FileWriter ut = ny FileWriter ("book_new.csv"); CSVPrinter-skriver = CSVFormat.DEFAULT .withHeader ("forfatter", "tittel"). Utskrift (ut);

6. Konklusjon

Vi presenterte bruken av Apache's Commons CSV-bibliotek gjennom et enkelt eksempel. Du kan lese mer om biblioteket her.

Koden for denne artikkelen er tilgjengelig på Github.


$config[zx-auto] not found$config[zx-overlay] not found