Inleiding tot Apache Commons CSV

1. Overzicht

Apache Commons CSV-bibliotheek heeft veel handige functies voor het maken en lezen van CSV-bestanden.

In deze korte zelfstudie zullen we zien hoe u deze bibliotheek kunt gebruiken door een eenvoudig voorbeeld te laten zien.

2. Maven Afhankelijkheid

Om te beginnen zullen we de nieuwste versie van deze bibliotheek importeren met Maven:

 org.apache.commons commons-csv 1.4 

Ga hierheen om de meest recente versie van deze bibliotheek te controleren.

3. Lezen van een CSV-bestand

Beschouw het volgende CSV-bestand met de naam book.csv dat de kenmerken van een boek bevat:

auteur, titel Dan Simmons, Hyperion Douglas Adams, The Hitchhiker's Guide to the Galaxy

Laten we eens kijken hoe we het kunnen lezen:

Kaart AUTHOR_BOOK_MAP = nieuwe HashMap () {{put ("Dan Simmons", "Hyperion"); put ("Douglas Adams", "The Hitchhiker's Guide to the Galaxy"); }}); String [] HEADERS = {"auteur", "titel"}; @Test openbare ongeldig gegeven CSVFile_whenRead_thenContentsAsExpected () gooit IOException {Reader in = nieuwe FileReader ("book.csv"); Herhaalbare records = CSVFormat.DEFAULT .withHeader (HEADERS) .withFirstRecordAsHeader () .parse (in); voor (CSVRecord record: records) {String author = record.get ("author"); String title = record.get ("title"); assertEquals (AUTHOR_BOOK_MAP.get (auteur), titel); }}

We lezen de records van een CSV-bestand nadat we de eerste regel hebben overgeslagen omdat dit de koptekst is.

Er zijn verschillende soorten CSVFormat specificeren van het formaat van het CSV-bestand, waarvan u een voorbeeld kunt zien in de volgende paragraaf.

4. Een CSV-bestand maken

Laten we eens kijken hoe we hetzelfde CSV-bestand kunnen maken als hierboven:

public void createCSVFile () gooit IOException {FileWriter uit = nieuwe FileWriter ("book_new.csv"); probeer (CSVPrinter printer = nieuwe CSVPrinter (uit, CSVFormat.DEFAULT .withHeader (HEADERS))) {AUTHOR_BOOK_MAP.forEach ((auteur, titel) -> {printer.printRecord (auteur, titel);}); }}

Het nieuwe CSV-bestand wordt gemaakt met de juiste headers omdat we deze hebben gespecificeerd in ons CSVFormat verklaring.

5. Headers & leeskolommen

Er zijn verschillende manieren om kopteksten te lezen en te schrijven. Evenzo zijn er verschillende manieren om kolomwaarden te lezen.

Laten we ze een voor een doornemen:

5.1. Kolommen openen via index

Dit is de meest eenvoudige manier om kolomwaarden te lezen. Dit kan worden gebruikt als de headers voor de CSV-bestanden niet bekend zijn:

Reader in = nieuwe FileReader ("book.csv"); Herhaalbare records = CSVFormat.DEFAULT.parse (in); voor (CSVRecord-record: records) {String columnOne = record.get (0); String columnTwo = record.get (1); }

5.2. Toegang tot kolommen via vooraf gedefinieerde kopteksten

Dit is een meer intuïtieve manier om toegang te krijgen tot kolommen in vergelijking met toegang via indexen:

Herhaalde records = CSVFormat.DEFAULT .withHeader ("auteur", "titel"). Parse (in); voor (CSVRecord record: records) {String author = record.get ("author"); String title = record.get ("title"); }

5.3. Enums gebruiken als kopteksten

Gebruik makend van Snaren voor toegang tot kolomwaarden kan foutgevoelig zijn. Als u Enums gebruikt in plaats van Strings, wordt de code meer gestandaardiseerd en gemakkelijker te begrijpen:

enum BookHeaders {auteur, titel} Herhaalde records = CSVFormat.DEFAULT .withHeader (BookHeaders.class) .parse (in); voor (CSVRecord-record: records) {String author = record.get (BookHeaders.author); String title = record.get (BookHeaders.title); }

5.4. De koptekst overslaan

Meestal bevatten CSV-bestanden kopteksten op de eerste regel. Daarom is het in de meeste gevallen veilig om het over te slaan en te beginnen met lezen vanaf de tweede rij.

Hiermee worden kopteksten automatisch gedetecteerd die toegang krijgen tot kolomwaarden:

Herhaalbare records = CSVFormat.DEFAULT .withFirstRowAsHeader (). Parse (in); voor (CSVRecord record: records) {String author = record.get ("author"); String title = record.get ("title"); }

5.5. Een bestand met kopteksten maken

Evenzo kunnen we een CSV-bestand maken met de eerste regel met de kopteksten:

FileWriter out = nieuwe FileWriter ("book_new.csv"); CSVPrinter printer = CSVFormat.DEFAULT .withHeader ("auteur", "titel"). Print (uit);

6. Conclusie

We presenteerden het gebruik van Apache's Commons CSV-bibliotheek aan de hand van een eenvoudig voorbeeld. U kunt hier meer lezen over de bibliotheek.

De code voor dit artikel is beschikbaar op Github.