Bevezetés az Apache Commons CSV-be
1. Áttekintés
Az Apache Commons CSV könyvtár számos hasznos funkcióval rendelkezik a CSV fájlok létrehozásához és olvasásához.
Ebben a gyors bemutatóban megtudhatjuk, hogyan lehet ezt a könyvtárat használni egy egyszerű példa bemutatásával.
2. Maven-függőség
A kezdéshez a könyvtár legújabb verzióját importáljuk a Maven használatával:
org.apache.commons commons-csv 1.4
A könyvtár legfrissebb verziójának ellenőrzéséhez látogasson el ide.
3. CSV fájl olvasása
Vegyük fontolóra a következő könyv .csv nevű CSV fájlt, amely egy könyv attribútumait tartalmazza:
szerző, cím Dan Simmons, Hyperion Douglas Adams, A stoppos útmutató a galaxishoz
Lássuk, hogyan olvashatjuk el:
Térkép AUTHOR_BOOK_MAP = új HashMap () {{put ("Dan Simmons", "Hyperion"); put ("Douglas Adams", "A stoppos útmutató a galaxishoz"); }}); Karakterlánc [] HEADERS = {"szerző", "cím"}; @Test public void givenCSVFile_whenRead_thenContentsAsExpected () dobja az IOException {Reader-t = új FileReader ("book.csv"); Iterálható rekordok = CSVFormat.DEFAULT .withHeader (HEADERS) .withFirstRecordAsHeader () .parse (in); for (CSVRecord rekord: rekordok) {Karaktersorozat = rekord.get ("szerző"); Karakterlánc címe = rekord.get ("cím"); assertEquals (AUTHOR_BOOK_MAP.get (szerző), cím); }}
Egy CSV-fájl rekordjait olvassuk, miután kihagytuk az első sort, mivel ez a fejléc.
Különböző típusúak CSVFormat megadva a CSV fájl formátumát, amelynek példáját a következő bekezdésben láthatja.
4. CSV fájl létrehozása
Nézzük meg, hogyan hozhatjuk létre ugyanazt a CSV fájlt, mint fent:
public void createCSVFile () kidobja az IOException {FileWriter-t = new FileWriter ("book_new.csv"); próbáld (CSVPrinter nyomtató = új CSVPrinter (ki, CSVFormat.DEFAULT .withHeader (HEADERS))) {AUTHOR_BOOK_MAP.forEach ((szerző, cím) -> {printer.printRecord (szerző, cím);}); }}
Az új CSV-fájl a megfelelő fejlécekkel kerül létrehozásra, mert ezeket megadtuk a fájlban CSVFormat nyilatkozat.
5. Fejlécek és oszlopok olvasása
A fejlécek olvasása és írása különböző módon lehetséges. Hasonlóképpen az oszlopértékek olvasásának különböző módjai vannak.
Menjünk végig rajtuk egyenként:
5.1. Oszlopok elérése index szerint
Ez az oszlopértékek olvasásának legalapvetőbb módja. Ez akkor használható, ha a CSV-fájlok fejlécei nem ismertek:
Reader in = új FileReader ("book.csv"); Iterálható rekordok = CSVFormat.DEFAULT.parse (in); for (CSVRecord rekord: rekordok) {String columnOne = record.get (0); Karakterlánc oszlopTwo = record.get (1); }
5.2. Oszlopok elérése előre definiált fejlécekkel
Ez az oszlopok elérésének intuitívabb módja, összehasonlítva az indexekkel történő eléréssel:
Iterálható rekordok = CSVFormat.DEFAULT .withHeader ("szerző", "cím"). Elemzés (be); for (CSVRecord rekord: rekordok) {Karaktersorozat = rekord.get ("szerző"); Karakterlánc címe = rekord.get ("cím"); }
5.3. Enums használata fejlécként
Használata Húrok az oszlopértékek elérése hibára hajlamos lehet. A Strings helyett az Enums használata szabványosabbá és könnyebben érthetővé teszi a kódot:
enum BookHeaders {szerző, cím} Iterálható rekordok = CSVFormat.DEFAULT .withHeader (BookHeaders.class) .parse (in); for (CSVRecord rekord: rekordok) {Karaktersorozat = rekord.get (BookHeaders.author); Karakterlánc címe = record.get (BookHeaders.title); }
5.4. A fejléc átugrása
Általában a CSV fájlok fejléceket tartalmaznak az első sorban. Ezért a legtöbb esetben biztonságos kihagyni és a második sorból kezdeni az olvasást.
Ez automatikusan felismeri a fejlécek oszlopértékeinek elérését:
Iterálható rekordok = CSVFormat.DEFAULT .withFirstRowAsHeader (). Parse (in); for (CSVRecord rekord: rekordok) {Karaktersorozat = rekord.get ("szerző"); Karakterlánc címe = rekord.get ("cím"); }
5.5. Fájl létrehozása fejlécekkel
Hasonlóképpen létrehozhatunk egy CSV fájlt is, amelynek első sora tartalmazza a fejléceket:
FileWriter out = új FileWriter ("book_new.csv"); CSVPrinter nyomtató = CSVFormat.DEFAULT .withHeader ("szerző", "cím"). Nyomtatás (ki);
6. Következtetés
Egy egyszerű példán keresztül mutattuk be az Apache's Commons CSV könyvtár használatát. A könyvtárról itt olvashat bővebben.
A cikk kódja elérhető a Github oldalon.