Bevezetés az OpenCSV-be

1. Bemutatkozás

Ez a rövid cikk bemutatja az OpenCSV 4-et, egy fantasztikus könyvtárat az íráshoz, az olvasáshoz, a sorosításhoz, a dezerializáláshoz és / vagy az elemzéshez .csv fájlok! Az alábbiakban számos példát mutatunk be, amelyek bemutatják az OpenCSV 4 beállítását és használatát.

2. Beállítás

Így adhatja hozzá az OpenCSV-t a projektjéhez a pom.xml függőség:

 com.opencsv opencsv 4.1 

A .jars az OpenCSV-hez megtalálható a hivatalos oldalon, vagy a Maven Repository gyorskeresésével.

A mi .csv a fájl nagyon egyszerű lesz, két oszlopban és négy sorban tartjuk:

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

3. Babnak vagy Nem babnak

Miután hozzáadta az OpenCSV fájlt a pom.xml, két kényelmes módon valósíthatjuk meg a CSV-kezelési módszereket:

  1. a praktikus segítségével CSVReader és CSVWriter objektumok (egyszerűbb műveletekhez) vagy
  2. felhasználásával CsvToBean átalakít .csv fájlokat babokba (amelyek kommentárként kerülnek végrehajtásra sima-régi-java-objektumok).

Mi maradunk szinkron (vagy blokkolás) példák erre a cikkre, így az alapokra koncentrálhatunk.

Ne feledje, a szinkron metódus megakadályozza a környező vagy az azt követő kód futtatását, amíg ez elkészül. Bármely termelési környezet valószínűleg használni fogja aszinkron vagy (nem blokkoló) módszerek, amelyek lehetővé teszik más folyamatok vagy módszerek befejezését a aszinkron módszer befejeződik.

Bemerülünk aszinkron példák az OpenCSV-re egy következő cikkben.

3.1. A CSVReader

CSVReader - a mellékelt readAll () és readNext () mód! Nézzük meg, hogyan kell használni readAll() szinkronban:

public List readAll (Reader olvasó) dobja a {CSVReader csvReader = new CSVReader (reader) kivételt; Lista lista = new ArrayList (); list = csvReader.readAll (); olvasó.zárja (); csvReader.close (); visszatérési lista; }

Akkor hívhatjuk ezt a módszert úgy, hogy átadjuk a BufferedReader:

public String readAllExample () dobja a {Reader reader = Files.newBufferedReader (Paths.get (ClassLoader.getSystemResource ("csv / twoColumn.csv"). toURI ())) kivételt; return CsvReaderExamples.readAll (olvasó) .toString (); }

Hasonlóképpen elvonatkoztathatunk readNext() amely egy mellékelt szöveget olvas .csv Vonalról vonalra:

public list oneByOne (Reader olvasó) a {List list = new ArrayList () kivételt dobja; CSVReader csvReader = új CSVReader (olvasó); Húr [] vonal; while ((line = csvReader.readNext ())! = null) {list.add (sor); } olvasó.zárja (); csvReader.close (); visszatérési lista; }

És ezt a módszert itt úgy hívhatjuk, hogy átadjuk a BufferReader:

public String oneByOneExample () dobja a Kivételt {Reader reader = Files.newBufferedReader (Paths.get (ClassLoader.getSystemResource ("csv / twoColumn.csv"). toURI ())); return CsvReaderExamples.oneByOne (olvasó) .toString (); } 

A nagyobb rugalmasság és a konfigurációs lehetőségek alternatívaként is használhatók CSVReaderBuilder:

CSVParser parser = új CSVParserBuilder () .withSeparator (',') .withIgnoreQuotations (true) .build (); CSVReader csvReader = new CSVReaderBuilder (reader) .withSkipLines (0) .withCSVParser (parser) .build ();

CSVReaderBuilder lehetővé teszi az oszlopok fejlécének átugrását és az elemzési szabályok beállítását CSVParserBuilder.

Használata CSVParserBuilder, választhatunk egyéni oszlopelválasztót, figyelmen kívül hagyhatjuk vagy kezelhetjük az idézőjeleket, megadhatjuk, hogy miként kezeljük a null mezőket, és hogyan értelmezzük a megszökött karaktereket. A konfigurációs beállításokkal kapcsolatos további információkért tekintse meg a hivatalos specifikációs dokumentumokat.

Mint mindig, kérjük, ne felejtse el bezárni az összes Olvasók hogy megakadályozzuk a memória szivárgását!

3.2. A CSVWriter

CSVWriter hasonlóképpen biztosítja az írási képességet a .csv fájlokat egyszerre vagy sorról sorra.

Vessünk egy pillantást arra, hogyan kell írni a .csv Vonalról vonalra:

public String csvWriterOneByOne (List stringArray, Path path) dobja a Kivételt {CSVWriter író = új CSVWriter (új FileWriter (elérési út.String ())); for (String [] tömb: stringArray) {író.írásiNext (tömb); } író.zárja (); return Helpers.readFile (elérési út); } 

Most adjuk meg, hová akarjuk menteni a fájlt, és hívjuk meg az imént írt módszert:

public String csvWriterOneByOne () dobja a Kivételt {Path path = Paths.get (ClassLoader.getSystemResource ("csv / writtenOneByOne.csv"). toURI ()); return CsvWriterExamples.csvWriterOneByOne (Helpers.fourColumnCsvString (), elérési út); }

Azt is megírhatjuk .csv egyszerre úgy, hogy átmennek a Lista nak,-nek Húr tömbjeink ábrázolják a sorainkat .csv. :

public String csvWriterAll (List stringArray, Path path) dobja a {CSVWriter író = új CSVWriter (új FileWriter (elérési út.String ())) kivételt; író.írjaAll (stringArray); író.zárja (); return Helpers.readFile (elérési út); }

És így hívjuk:

public String csvWriterAll () dobja a (z) {Path path = Paths.get (ClassLoader.getSystemResource ("csv / writtenAll.csv"). kivétel) toURI () kivételt; return CsvWriterExamples.csvWriterAll (Helpers.fourColumnCsvString (), elérési út); }

Ez az!

3.3. Bab alapú olvasás

Az OpenCSV képes sorosítani .csv fájlokat előre beállított és újrafelhasználható sémákba, amelyeket kommentált Java-ként hajtanak végre pojo bab. CsvToBean felhasználásával készül CsvToBeanBuilder. Az OpenCSV 4-től kezdődően CsvToBeanBuilder a munka ajánlott módja com.opencsv.bean.CsvToBean.

Itt van egy egyszerű bab, amellyel két oszlopunkat sorosíthatjuk .csv tól től 2. szakasz.:

public class SimplePositionBean {@CsvBindByPosition (position = 0) private String exampleColOne; @CsvBindByPosition (pozíció = 1) privát karakterlánc exampleColTwo; // szerelők és beállítók} 

Minden oszlop a .csv a fájl a bab mezőjéhez van társítva. Közötti leképezések .csv oszlopfejlécek a @CsvBindByPosition vagy a @CsvBindByName jelölések, amelyek megadják a leképezést pozíció vagy fejléc karakterlánc egyezés alapján.

Először hozzunk létre egy CsvBean nevű szuperosztályt - ez lehetővé teszi számunkra az alább felépített módszerek újrafelhasználását és általánosítását:

nyilvános osztály CsvBean {}

Példa gyermekosztályra:

a NamedColumnBean public osztály kiterjeszti a CsvBean {@CsvBindByName (oszlop = "név") privát karakterlánc nevet; @CsvBindByName private int age; // szerelők és beállítók}

Vontassunk el egy szinkron módon visszaadott értéket Lista használni a CsvToBean:

 public List beanBuilderExample (Path path, Class clazz) dobja a {CsvTransfer csvTransfer = new CsvTransfer () kivételt; ColumnPositionMappingStrategy ms = new ColumnPositionMappingStrategy (); ms.setType (clazz); Reader olvasó = Files.newBufferedReader (elérési út); CsvToBean cb = új CsvToBeanBuilder (olvasó) .withType (clazz) .withMappingStrategy (ms) .build (); csvTransfer.setCsvList (cb.parse ()); olvasó.zárja (); return csvTransfer.getCsvList (); }

A babunkban (clazz), és ezt állítsa be OszlopPositionMappingStrategy. Ennek során a babjaink mezejeit társítjuk az oszlopok megfelelő oszlopaival .csv sorok.

Ezt itt hívhatjuk a SimplePositionBean alosztálya CsvBean fentebb írtuk:

public String simplePositionBeanExample () dobja a {Path path = Paths.get (ClassLoader.getSystemResource ("csv / twoColumn.csv") kivételt. toURI ()); return BeanExamples.beanBuilderExample (elérési út, SimplePositionBean.class) .toString (); }

vagy itt a NamedColumnBean - másik alosztálya CsvBean:

public String namedColumnBeanExample () dobja a (z) {Path path = Paths.get (ClassLoader.getSystemResource ("csv / namedColumn.csv")) kivételt. toURI (); return BeanExamples.beanBuilderExample (elérési út, NamedColumnBean.class) .toString (); }

3.4. Bab alapú írás

Végül vessünk egy pillantást a StatefulBeanToCsv osztályba írni a .csv fájl:

public String writeCsvFromBean (Elérési útvonal) dobja a Kivételt {Writer író = új FileWriter (elérési út.String ()); StatefulBeanToCsv sbc = new StatefulBeanToCsvBuilder (író) .WithSeparator (CSVWriter.DEFAULT_SEPARATOR) .build (); Lista lista = new ArrayList (); list.add (új WriteExampleBean ("Test1", "sfdsf", "fdfd")); list.add (új WriteExampleBean ("Test2", "ipso", "facto"); sbc.write (lista); író.zárja (); return Helpers.readFile (elérési út); }

Itt határozzuk meg, hogyan határozzuk meg a Lista meghatározott CsvBean tárgyakat.

Ezután hívhatjuk a módszerünket writeCsvFromBean () miután átadta a kívánt kimeneti fájl elérési útját:

public String writeCsvFromBeanExample () {Path path = Paths.get (ClassLoader.getSystemResource ("csv / wroteBean.csv"). toURI ()); return BeanExamples.writeCsvFromBean (elérési út); }

4. Következtetés

Oda megyünk - szinkron kód példák OpenCSV bab felhasználásával, CSVReader, és CSVWriter. Itt tekintheti meg a hivatalos dokumentumokat.

Mint mindig, a kódmintákat is átadják a GitHub-on.