Introduktion til Apache Commons CSV
1. Oversigt
Apache Commons CSV-bibliotek har mange nyttige funktioner til oprettelse og læsning af CSV-filer.
I denne hurtige vejledning ser vi, hvordan du bruger dette bibliotek ved at vise et simpelt eksempel.
2. Maven-afhængighed
For at starte importerer vi den nyeste version af dette bibliotek ved hjælp af Maven:
org.apache.commons commons-csv 1.4
For at kontrollere den nyeste version af dette bibliotek - gå her.
3. Læsning af en CSV-fil
Overvej følgende CSV-fil kaldet book.csv, der indeholder attributterne for en bog:
forfatter, titel Dan Simmons, Hyperion Douglas Adams, The Hitchhiker's Guide to the Galaxy
Lad os se, hvordan vi kan læse det:
Kort AUTHOR_BOOK_MAP = nyt HashMap () {{put ("Dan Simmons", "Hyperion"); put ("Douglas Adams", "The Hitchhiker's Guide to the Galaxy"); }}); String [] HEADERS = {"author", "title"}; @Test offentlig ugyldighed givetCSVFile_whenRead_thenContentsAsExpected () kaster IOException {Reader i = ny FileReader ("book.csv"); Iterable poster = CSVFormat.DEFAULT .withHeader (HEADERS) .withFirstRecordAsHeader () .parse (in); for (CSVRecord-post: poster) {String author = record.get ("author"); String title = record.get ("title"); assertEquals (AUTHOR_BOOK_MAP.get (forfatter), titel); }}
Vi læser optegnelserne for en CSV-fil efter at have sprunget over den første linje, da det er overskriften.
Der er forskellige typer CSVFormat angive formatet på CSV-filen, som du eksempel kan se i næste afsnit.
4. Oprettelse af en CSV-fil
Lad os se, hvordan vi kan oprette den samme CSV-fil som ovenfor:
offentlig tomrum createCSVFile () smider IOException {FileWriter ud = ny FileWriter ("book_new.csv"); prøv (CSVPrinter printer = ny CSVPrinter (ud, CSVFormat.DEFAULT .withHeader (HEADERS))) {AUTHOR_BOOK_MAP.forEach ((forfatter, titel) -> {printer.printRecord (forfatter, titel);}); }}
Den nye CSV-fil oprettes med de relevante overskrifter, fordi vi har angivet dem i vores CSVFormat erklæring.
5. Overskrifter og læsekolonner
Der er forskellige måder at læse og skrive overskrifter på. På samme måde er der forskellige måder at læse kolonneværdier på.
Lad os gennemgå dem en efter en:
5.1. Adgang til kolonner efter indeks
Dette er den mest basale måde at læse kolonneværdier på. Dette kan bruges, når overskrifterne til CSV-filerne ikke kendes:
Læser i = ny FileReader ("book.csv"); Iterable poster = CSVFormat.DEFAULT.parse (in); for (CSVRecord record: records) {String columnOne = record.get (0); Streng columnTwo = record.get (1); }
5.2. Adgang til søjler med foruddefinerede overskrifter
Dette er en mere intuitiv måde at få adgang til kolonner i forhold til adgang med indekser:
Iterable poster = CSVFormat.DEFAULT .withHeader ("forfatter", "titel"). Parse (in); for (CSVRecord-post: poster) {String author = record.get ("author"); String title = record.get ("title"); }
5.3. Brug af Enums som overskrifter
Ved brug af Strenge for at få adgang til kolonneværdier kan være udsat for fejl. Brug af Enums i stedet for Strings gør koden mere standardiseret og lettere at forstå:
enum BookHeaders {author, title} Iterable records = CSVFormat.DEFAULT .withHeader (BookHeaders.class) .parse (in); for (CSVRecord record: records) {String author = record.get (BookHeaders.author); String title = record.get (BookHeaders.title); }
5.4. Spring over hovedlinjen
Normalt indeholder CSV-filer overskrifter i første linje. Derfor er det i de fleste tilfælde sikkert at springe det over og begynde at læse fra anden række.
Dette registrerer automatisk overskrifter med adgang til kolonneværdier:
Iterable poster = CSVFormat.DEFAULT .withFirstRowAsHeader (). Parse (in); for (CSVRecord record: records) {String author = record.get ("author"); String title = record.get ("title"); }
5.5. Oprettelse af en fil med overskrifter
På samme måde kan vi oprette en CSV-fil med den første linje, der indeholder overskrifterne:
FileWriter out = ny FileWriter ("book_new.csv"); CSVPrinter printer = CSVFormat.DEFAULT .withHeader ("forfatter", "titel"). Print (ud);
6. Konklusion
Vi præsenterede brugen af Apache's Commons CSV-bibliotek gennem et simpelt eksempel. Du kan læse mere om biblioteket her.
Koden til denne artikel er tilgængelig på Github.