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.