Úvod do Apache Commons CSV
1. Prehľad
Knižnica Apache Commons CSV má mnoho užitočných funkcií na vytváranie a čítanie súborov CSV.
V tomto rýchlom návode uvidíme, ako využiť túto knižnicu, a to uvedením jednoduchého príkladu.
2. Závislosť od Maven
Najskôr importujeme najnovšiu verziu tejto knižnice pomocou nástroja Maven:
org.apache.commons commons-csv 1.4
Najnovšiu verziu tejto knižnice nájdete tu.
3. Čítanie súboru CSV
Zvážte nasledujúci súbor CSV s názvom book.csv, ktorý obsahuje atribúty knihy:
autor, titul Dan Simmons, Hyperion Douglas Adams, Stopárov sprievodca galaxiou
Pozrime sa, ako to môžeme prečítať:
Mapa AUTHOR_BOOK_MAP = nová HashMap () {{put ("Dan Simmons", "Hyperion"); put („Douglas Adams“, „Stopárov sprievodca galaxiou“); }}); Reťazec [] HEADERS = {"autor", "názov"}; @ Test public void givenCSVFile_whenRead_thenContentsAsExected () vyvolá IOException {Reader in = nový FileReader ("book.csv"); Iterovateľné záznamy = CSVFormat.DEFAULT .withHeader (HEADERS) .withFirstRecordAsHeader () .parse (in); pre (záznam CSVRecord: záznamy) {String autor = record.get ("autor"); Názov reťazca = record.get ("názov"); assertEquals (AUTHOR_BOOK_MAP.get (autor), titul); }}
Čítame záznamy súboru CSV po preskočení prvého riadku, ktorý je hlavičkou.
Existujú rôzne typy CSVFormát s uvedením formátu súboru CSV, ktorého príklad môžete vidieť v nasledujúcom odseku.
4. Vytvorenie súboru CSV
Pozrime sa, ako môžeme vytvoriť rovnaký súbor CSV ako vyššie:
public void createCSVFile () vyhodí IOException {FileWriter out = new FileWriter ("book_new.csv"); try (CSVPrinter printer = new CSVPrinter (out, CSVFormat.DEFAULT .withHeader (HEADERS))) {AUTHOR_BOOK_MAP.forEach ((autor, titul) -> {printer.printRecord (autor, titul);}); }}
Nový súbor CSV bude vytvorený s príslušnými hlavičkami, pretože sme ich špecifikovali v našom CSVFormát vyhlásenie.
5. Hlavičky a stĺpce na čítanie
Existujú rôzne spôsoby čítania a zápisu hlavičiek. Podobne existujú rôzne spôsoby čítania hodnôt stĺpcov.
Prejdime si ich jeden po druhom:
5.1. Prístup k stĺpcom podľa indexu
Toto je najzákladnejší spôsob čítania hodnôt stĺpcov. Toto možno použiť, ak nie sú známe hlavičky súborov CSV:
Čítačka v = nový FileReader ("book.csv"); Iterovateľné záznamy = CSVFormat.DEFAULT.parse (in); pre (záznam CSVRecord: záznamy) {String columnOne = record.get (0); Reťazec columnTwo = record.get (1); }
5.2. Prístup k stĺpcom podľa preddefinovaných hlavičiek
Toto je intuitívnejší spôsob prístupu k stĺpcom v porovnaní s prístupom pomocou indexov:
Iterovateľné záznamy = CSVFormat.DEFAULT .withHeader ("autor", "názov"). Parse (v); pre (záznam CSVRecord: záznamy) {String autor = record.get ("autor"); Názov reťazca = record.get ("názov"); }
5.3. Používanie Enums ako hlavičiek
Použitím Struny pre prístup k hodnotám stĺpcov môže byť náchylný na chyby. Použitie Enums namiesto reťazcov spôsobí, že bude kód štandardizovanejší a zrozumiteľnejší:
enum BookHeaders {autor, titul} Iterovateľné záznamy = CSVFormat.DEFAULT .withHeader (BookHeaders.class) .parse (in); pre (záznam CSVRecord: záznamy) {autor reťazca = record.get (BookHeaders.author); Názov reťazca = record.get (BookHeaders.title); }
5.4. Preskočenie záhlavia
Súbory CSV zvyčajne obsahujú hlavičky v prvom riadku. Vo väčšine prípadov je preto bezpečné ho preskočiť a začať čítať od druhého riadku.
Týmto sa automaticky zistia hodnoty prístupu k hlavičkám:
Iterovateľné záznamy = CSVFormat.DEFAULT .withFirstRowAsHeader (). Parse (in); pre (záznam CSVRecord: záznamy) {String autor = record.get ("autor"); Názov reťazca = record.get ("názov"); }
5.5. Vytvorenie súboru s hlavičkami
Podobne môžeme vytvoriť súbor CSV s prvým riadkom obsahujúcim hlavičky:
FileWriter out = nový FileWriter ("book_new.csv"); CSVPrinter printer = CSVFormat.DEFAULT .withHeader ("autor", "titul"). Print (out);
6. Záver
Na jednoduchom príklade sme predstavili použitie knižnice Apache Commons CSV. Viac o knižnici sa dočítate tu.
Kód tohto článku je k dispozícii na stránkach Github.