Úvod do OpenCSV

1. Úvod

Tento rýchly článok predstavuje OpenCSV 4, fantastickú knižnicu na písanie, čítanie, serializáciu, deserializáciu a / alebo analýzu. .csv súbory! Ďalej si ukážeme niekoľko príkladov, ktoré ukazujú, ako nastaviť a používať OpenCSV 4 pre vaše úsilie.

2. Nastavenie

Tu je príklad, ako pridať OpenCSV do vášho projektu pomocou a pom.xml závislosť:

 com.opencsv opencsv 4.1 

The .jars pre OpenCSV nájdete na oficiálnych stránkach alebo prostredníctvom rýchleho vyhľadávania v úložisku Maven.

Náš .csv súbor bude naozaj jednoduchý, ponecháme ho na dva stĺpce a štyri riadky:

colA, ColB A, B C, D G, G G, F

3. Fazuľa alebo fazuľa

Po pridaní OpenCSV do vášho pom.xml, môžeme metódy spracovania CSV implementovať dvoma pohodlnými spôsobmi:

  1. pomocou šikovných CSVReader a CSVWriter objekty (pre jednoduchšie operácie) alebo
  2. použitím CsvToBean konvertovať .csv súbory do fazule (ktoré sú implementované ako anotované) plain-old-java-objects).

Zostaneme s synchrónny (alebo blokovanie) príklady tohto článku, aby sme sa mohli zamerať na základné informácie.

Pamätajte, a synchrónny metóda zabráni vykonaniu okolitého alebo následného kódu, kým nebude hotový. Pravdepodobne bude použité akékoľvek produkčné prostredie asynchrónny alebo (neblokujúci) metódy, ktoré umožnia dokončenie ďalších procesov alebo metód, kým asynchrónny metóda končí.

Ponoríme sa do toho asynchrónny príklady OpenCSV v budúcom článku.

3.1. The CSVReader

CSVReader - prostredníctvom dodávaného readAll () a readNext () metódy! Poďme sa pozrieť na to, ako sa používa readAll() synchrónne:

public List readAll (Reader reader) vyvolá výnimku {CSVReader csvReader = nový CSVReader (čitateľ); Zoznam zoznam = nový ArrayList (); list = csvReader.readAll (); reader.close (); csvReader.close (); návratový zoznam; }

Potom môžeme túto metódu nazvať odovzdaním a BufferedReader:

public String readAllExample () hodí Exception {Reader reader = Files.newBufferedReader (Paths.get (ClassLoader.getSystemResource ("csv / twoColumn.csv"). toURI ())); vrátiť CsvReaderExamples.readAll (čítačka) .toString (); }

Podobne môžeme abstrahovať readNext(), ktorý znie dodaný .csv riadok po riadku:

public List oneByOne (Reader reader) vyvolá výnimku {List list = new ArrayList (); CSVReader csvReader = nový CSVReader (čítačka); Reťazec [] riadok; while ((line = csvReader.readNext ())! = null) {list.add (line); } reader.close (); csvReader.close (); návratový zoznam; }

A tu môžeme túto metódu nazvať odovzdaním a BufferReader:

public String oneByOneExample () hodí Exception {Reader reader = Files.newBufferedReader (Paths.get (ClassLoader.getSystemResource ("csv / twoColumn.csv"). toURI ())); návrat CsvReaderExamples.oneByOne (čítačka) .toString (); } 

Pre väčšiu flexibilitu a možnosti konfigurácie môžete alternatívne použiť CSVReaderBuilder:

Analyzátor CSVParser = nový CSVParserBuilder () .withSeparator (',') .withIgnoreQuotations (true) .build (); CSVReader csvReader = nový CSVReaderBuilder (čítačka) .withSkipLines (0) .withCSVParser (parser) .build ();

CSVReaderBuilder umožňuje preskočiť hlavičky stĺpcov a nastaviť pravidlá analýzy CSVParserBuilder.

Použitím CSVParserBuilder, môžeme zvoliť vlastný oddeľovač stĺpcov, ignorovať alebo zaobchádzať s úvodzovkami, uviesť, ako budeme zaobchádzať s nulovými poľami a ako interpretovať uniknuté znaky. Viac informácií o týchto konfiguračných nastaveniach nájdete v oficiálnych dokumentoch so špecifikáciami.

Ako vždy, nezabudnite zavrieť všetky svoje Čitatelia aby sa zabránilo úniku pamäte!

3.2. The CSVWriter

CSVWriter podobne dodáva schopnosť písať do a .csv súbor naraz alebo riadok po riadku.

Poďme sa pozrieť na to, ako písať do a .csv riadok po riadku:

public String csvWriterOneByOne (List stringArray, cesta cesty) vyvolá výnimku {CSVWriter writer = nový CSVWriter (nový FileWriter (path.toString ())); pre (String [] pole: stringArray) {writer.writeNext (pole); } writer.close (); return Helpers.readFile (cesta); } 

Teraz uveďme, kam chceme daný súbor uložiť, a zavoláme metódu, ktorú sme práve napísali:

public String csvWriterOneByOne () vyvolá výnimku {Path path = Paths.get (ClassLoader.getSystemResource ("csv / writtenOneByOne.csv"). toURI ()); return CsvWriterExamples.csvWriterOneByOne (Helpers.fourColumnCsvString (), cesta); }

Môžeme tiež napísať svoje .csv naraz podaním a Zoznam z String polia predstavujúce rady našich .csv. :

public String csvWriterAll (List stringArray, cesta cesty) vyvolá výnimku {CSVWriter writer = nový CSVWriter (nový FileWriter (path.toString ())); writer.writeAll (stringArray); writer.close (); return Helpers.readFile (cesta); }

A takto to nazývame:

public String csvWriterAll () vyvolá výnimku {Path path = Paths.get (ClassLoader.getSystemResource ("csv / writtenAll.csv"). toURI ()); return CsvWriterExamples.csvWriterAll (Helpers.fourColumnCsvString (), cesta); }

To je všetko!

3.3. Čítanie na základe fazule

OpenCSV je schopný serializovať .csv súbory do prednastavených a opakovane použiteľných schém implementovaných ako anotovaná Java pojo fazuľa. CsvToBean je konštruovaný pomocou CsvToBeanBuilder. Od verzie OpenCSV 4 CsvToBeanBuilder je odporúčaný spôsob práce com.opencsv.bean.CsvToBean.

Tu je jednoduchá fazuľa, ktorú môžeme použiť na serializáciu nášho dvojstĺpca .csv od oddiel 2.:

verejná trieda SimplePositionBean {@CsvBindByPosition (pozícia = 0) súkromné ​​String exampleColOne; @CsvBindByPosition (pozícia = 1) private String exampleColTwo; // zakladatelia a zakladatelia} 

Každý stĺpec v .csv súbor je spojený s poľom v fazuli. Mapovania medzi .csv nadpisy stĺpcov je možné vykonať pomocou @CsvBindByPosition alebo @CsvBindByName anotácie, ktoré určujú priradenie podľa polohy alebo reťazca záhlavia.

Najskôr si vytvorme nadtriedu nazvanú CsvBean - to nám umožní znovu použiť a zovšeobecniť metódy, ktoré zostavíme nižšie:

verejná trieda CsvBean {}

Príklad triedy dieťaťa:

verejná trieda NamedColumnBean rozširuje CsvBean {@CsvBindByName (stĺpec = "meno") súkromné ​​meno reťazca; @CsvBindByName private int age; // zakladatelia a zakladatelia}

Poďme abstrahovať synchrónne vrátený Zoznam pomocou CsvToBean:

 public List beanBuilderExample (cesta, trieda clazz) vyvolá výnimku {CsvTransfer csvTransfer = nový CsvTransfer (); ColumnPositionMappingStrategy ms = nový ColumnPositionMappingStrategy (); ms.setType (clazz); Čítačka čítačky = Files.newBufferedReader (cesta); CsvToBean cb = nový CsvToBeanBuilder (čítačka) .withType (clazz) .withMappingStrategy (ms) .build (); csvTransfer.setCsvList (cb.parse ()); reader.close (); return csvTransfer.getCsvList (); }

Míňame vo svojej fazuli (clazz) a nastavte ako ColumnPositionMappingStrategy. Pritom spojíme polia našich fazúľ s príslušnými stĺpcami našich .csv riadkov.

Môžeme to tu nazvať pomocou SimplePositionBean podtrieda CsvBean vyššie sme napísali:

public String simplePositionBeanExample () hodí výnimku {Path path = Paths.get (ClassLoader.getSystemResource ("csv / twoColumn.csv"). toURI ()); return BeanExamples.beanBuilderExample (cesta, SimplePositionBean.class) .toString (); }

alebo tu pomocou NamedColumnBean - ďalšia podtrieda CsvBean:

public String namedColumnBeanExample () vyvolá výnimku {Path path = Paths.get (ClassLoader.getSystemResource ("csv / namedColumn.csv"). toURI ()); return BeanExamples.beanBuilderExample (cesta, NamedColumnBean.class) .toString (); }

3.4. Fazuľové písanie

Na záver sa pozrime, ako používať StatefulBeanToCsv triedy napísať do a .csv spis:

public String writeCsvFromBean (cesta cesty) vyvolá výnimku {Writer Writer = nový FileWriter (path.toString ()); StatefulBeanToCsv sbc = nový StatefulBeanToCsvBuilder (zapisovateľ) .withSeparator (CSVWriter.DEFAULT_SEPARATOR) .build (); Zoznam zoznam = nový ArrayList (); list.add (nový WriteExampleBean ("Test1", "sfdsf", "fdfd")); list.add (nový WriteExampleBean ("Test2", "ipso", "facto")); sbc.write (zoznam); writer.close (); return Helpers.readFile (cesta); }

Tu upresňujeme, ako vymedzíme naše údaje, ktoré sa poskytujú ako Zoznam špecifikovaných CsvBean predmety.

Potom môžeme zavolať našu metódu writeCsvFromBean () po zadaní požadovanej cesty k výstupnému súboru:

public String writeCsvFromBeanExample () {Cesta cesty = Paths.get (ClassLoader.getSystemResource ("csv / writtenBean.csv"). toURI ()); return BeanExamples.writeCsvFromBean (cesta); }

4. Záver

A sme tu - príklady synchrónneho kódu pre OpenCSV pomocou fazule, CSVReadera CSVWriter. Oficiálne dokumenty nájdete tu.

Ako vždy, vzorky kódu sú poskytované na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found