Datoteka z vrednostmi, ločenimi z vejico (CSV) je običajna datoteka z navadnim besedilom, shranjuje podatke v stolpcu za stolpcem in jih razdeli z ločilom (npr. običajno je vejica, ).
OpenCSV je knjižnica razčlenjevalnika CSV za Javo. OpenCSV podpira vse osnovne operacije vrste CSV, ki jih želite izvesti. Java 7 je trenutno najmanjša podprta različica za OpenCSV. Jezik Java ne nudi izvorne podpore za učinkovito obdelavo datotek CSV, zato uporabljamo OpenCSV za obdelavo datotek CSV v Javi.
Kako uporabljati OpenCSV
1. Za projekt maven lahko vključite odvisnost OpenCSV maven v datoteko pom.xml.
HTML
<>dependency>>> ><>groupId>>com.opencsvgroupId> |
>
>
2. Za projekt Gradle lahko vključite odvisnost OpenCSV.
compile group: 'com.opencsv', name: 'opencsv', version: '4.1'>
3. Lahko prenesete OpenCSV Jar in vključite v svojo pot razreda projekta.
Nekaj uporabnih razredov opencsv
- CSVReader – ta razred nudi operacije za branje datoteke CSV kot seznama matrike nizov. CSVWriter – Ta razred nam omogoča pisanje podatkov v datoteko CSV. CsvToBean – Ta razred bo uporabljen, ko želite zapolniti svoje java bean iz vsebine datoteke CSV. BeanToCsv – Ta razred pomaga izvoziti podatke v datoteko CSV iz vaše aplikacije Java.
Branje datoteke CSV
Za branje datoteke CSV potrebujete razred CSVReader. Sledi vzorčna datoteka CSV, ki jo bomo prebrali.
name, rollno, department, result, cgpa amar, 42, cse, pass, 8.6 rohini, 21, ece, fail, 3.2 aman, 23, cse, pass, 8.9 rahul, 45, ee, fail, 4.6 pratik, 65, cse, pass, 7.2 raunak, 23, me, pass, 9.1 suvam, 68, me, pass, 8.2>
Datoteko csv lahko beremo na dva načina:
1. Preberite podatke vrstico za vrstico: Oglejmo si, kako brati datoteko CSV vrstico za vrstico. Za branje podatkov vrstico za vrstico moramo najprej zgraditi in inicializirati objekt CSVReader s posredovanjem objekta bralnika datotek datoteke CSV. Po tem moramo poklicati metodo readNext() objekta CSVReader, da preberemo podatke vrstico za vrstico, kot je prikazano v spodnji kodi.
Java
// Java code to illustrate reading a> // CSV file line by line> public> static> void> readDataLineByLine(String file)> {> > >try> {> > >// Create an object of filereader> >// class with CSV file as a parameter.> >FileReader filereader =>new> FileReader(file);> > >// create csvReader object passing> >// file reader as a parameter> >CSVReader csvReader =>new> CSVReader(filereader);> >String[] nextRecord;> > >// we are going to read data line by line> >while> ((nextRecord = csvReader.readNext()) !=>null>) {> >for> (String cell : nextRecord) {> >System.out.print(cell +>' '>);> >}> >System.out.println();> >}> >}> >catch> (Exception e) {> >e.printStackTrace();> >}> }> |
>
>
2. Preberite vse podatke hkrati: Zapise CSV enega za drugim beremo z metodo readNext(). CSVReader ponuja tudi metodo, imenovano readAll(), za branje vseh zapisov hkrati na seznam.
List allData = csvReader.readAll();>
Ko privzeto beremo datoteko csv, glava ne bo prezrta, kot je prikazano v izpisu zgornjih kod. Ko moramo preskočiti prvi element na seznamu, lahko med ustvarjanjem CSVReaderja določimo začetno vrstico.
CSVReader csvReader = new CSVReaderBuilder(reader).withSkipLines(1).build();>
Koda:
Java
// Java code to illustrate reading a> // all data at once> public> static> void> readAllDataAtOnce(String file)> {> >try> {> >// Create an object of file reader> >// class with CSV file as a parameter.> >FileReader filereader =>new> FileReader(file);> > >// create csvReader object and skip first Line> >CSVReader csvReader =>new> CSVReaderBuilder(filereader)> >.withSkipLines(>1>)> >.build();> >List allData = csvReader.readAll();> > >// print Data> >for> (String[] row : allData) {> >for> (String cell : row) {> >System.out.print(cell +>' '>);> >}> >System.out.println();> >}> >}> >catch> (Exception e) {> >e.printStackTrace();> >}> }> |
>
niz v celo število
>
Branje datoteke CSV z drugačnim ločilom
Datoteke CSV lahko ločite z ločilom, ki ni vejica, npr. podpičje, navpična črta itd. Naslednji primer prikazuje, kako brati podatke datoteke CSV, ločene s podpičjem.
Primer datoteke CSV, ločene s podpičjem:
name;rollno;department;result;cgpa amar;42;cse;pass;8.6 rohini;21;ece;fail;3.2 aman;23;cse;pass;8.9 rahul;45;ee;fail;4.6 pratik;65;cse;pass;7.2 raunak;23;me;pass;9.1 suvam;68;me;pass;8.2>
Za ločilo po meri se ustvari prvi CSVParser z določenim znakom razčlenjevalnika.
CSVParser parser = new CSVParserBuilder().withSeparator(';').build();> Nato bomo ustvarili objekt CSVReader z metodo CSVParser() skupaj s konstruktorjem in podali izdelani objekt razčlenjevalnika parametru metode withCSVParser. Nazadnje bomo poklicali metodo gradnje za gradnjo objekta.
CSVReader csvReader = new CSVReaderBuilder(filereader).withCSVParser(parser).build();>
Koda:
Java
// Java code to illustrate> // Reading CSV File with different separator> public> static> void> readDataFromCustomSeparator(String file)> {> >try> {> >// Create an object of file reader class with CSV file as a parameter.> >FileReader filereader =>new> FileReader(file);> > >// create csvParser object with> >// custom separator semi-colon> >CSVParser parser =>new> CSVParserBuilder().withSeparator(>';'>).build();> > >// create csvReader object with parameter> >// filereader and parser> >CSVReader csvReader =>new> CSVReaderBuilder(filereader)> >.withCSVParser(parser)> >.build();> > >// Read all data at once> >List allData = csvReader.readAll();> > >// Print Data.> >for> (String[] row : allData) {> >for> (String cell : row) {> >System.out.print(cell +>' '>);> >}> >System.out.println();> >}> >}> >catch> (Exception e) {> >e.printStackTrace();> >}> }> |
>
>
Primer – Branje dveh datotek csv result.csv in results_semicolon_Separator.csv
result.csv ima privzeto ločilo ', ', vendar ima results_semicolon_Separator.csv ločilo ';' namesto ', '.
Kode:
Java
// Java program to illustrate reading> // two CSV files> // with different separators> > import> java.io.FileReader;> import> java.util.List;> import> com.opencsv.*;> > public> class> ReadCSVData {> >private> static> final> String CSV_FILE_PATH> >=>'D:EclipseWorkSpaceCSVOperations
esults.csv'>;> >private> static> final> String CSV_FILE_CUSTOM_SEPARATOR> >=>'D:EclipseWorkSpaceCSVOperations
esults_semicolon_Separator.csv'>;> > >public> static> void> main(String[] args)> >{> > >System.out.println(>'Read Data Line by Line With Header
'>);> >readDataLineByLine(CSV_FILE_PATH);> >System.out.println(>'_______________________________________________'>);> > >System.out.println(>'Read All Data at Once and Hide the Header also
'>);> >readAllDataAtOnce(CSV_FILE_PATH);> >System.out.println(>'_______________________________________________'>);> > >System.out.println(>'Custom Separator here semi-colon
'>);> >readDataFromCustomSeparator(CSV_FILE_CUSTOM_SEPARATOR);> >System.out.println(>'_______________________________________________'>);> >}> > >public> static> void> readDataLineByLine(String file)> >{> > >try> {> > >// Create an object of filereader class> >// with CSV file as a parameter.> >FileReader filereader =>new> FileReader(file);> > >// create csvReader object passing> >// filereader as parameter> >CSVReader csvReader =>new> CSVReader(filereader);> >String[] nextRecord;> > >// we are going to read data line by line> >while> ((nextRecord = csvReader.readNext()) !=>null>) {> >for> (String cell : nextRecord) {> >System.out.print(cell +>' '>);> >}> >System.out.println();> >}> >}> >catch> (Exception e) {> >e.printStackTrace();> >}> >}> > >public> static> void> readAllDataAtOnce(String file)> >{> >try> {> > >// Create an object of filereader class> >// with CSV file as a parameter.> >FileReader filereader =>new> FileReader(file);> > >// create csvReader object> >// and skip first Line> >CSVReader csvReader =>new> CSVReaderBuilder(filereader)> >.withSkipLines(>1>)> >.build();> >List allData = csvReader.readAll();> > >// print Data> >for> (String[] row : allData) {> >for> (String cell : row) {> >System.out.print(cell +>' '>);> >}> >System.out.println();> >}> >}> >catch> (Exception e) {> >e.printStackTrace();> >}> >}> > >public> static> void> readDataFromCustomSeparator(String file)> >{> >try> {> >// Create object of filereader> >// class with csv file as parameter.> >FileReader filereader =>new> FileReader(file);> > >// create csvParser object with> >// custom separator semi-colon> >CSVParser parser =>new> CSVParserBuilder().withSeparator(>';'>).build();> > >// create csvReader object with> >// parameter filereader and parser> >CSVReader csvReader =>new> CSVReaderBuilder(filereader)> >.withCSVParser(parser)> >.build();> > >// Read all data at once> >List allData = csvReader.readAll();> > >// print Data> >for> (String[] row : allData) {> >for> (String cell : row) {> >System.out.print(cell +>' '>);> >}> >System.out.println();> >}> >}> >catch> (Exception e) {> >e.printStackTrace();> >}> >}> }> |
>
>
Izhod:
_______________________________________________ Read Data Line by Line With Header name rollno department result cgpa amar 42 cse pass 8.6 rohini 21 ece fail 3.2 aman 23 cse pass 8.9 rahul 45 ee fail 4.6 pratik 65 cse pass 7.2 raunak 23 me pass 9.1 suvam 68 me pass 8.2 _______________________________________________ Read All Data at Once and Hide the Header also amar 42 cse pass 8.6 rohini 21 ece fail 3.2 aman 23 cse pass 8.9 rahul 45 ee fail 4.6 pratik 65 cse pass 7.2 raunak 23 me pass 9.1 suvam 68 me pass 8.2 _______________________________________________ Custom Separator here semi-colon name rollno department result cgpa amar 42 cse pass 8.6 rohini 21 ece fail 3.2 aman 23 cse pass 8.9 rahul 45 ee fail 4.6 pratik 65 cse pass 7.2 raunak 23 me pass 9.1 suvam 68 me pass 8.2 _______________________________________________>
V prihodnje članke bomo vključili več operacij v datoteki CSV z uporabo OpenCSV.
Reference: Dokumentacija razreda CSVReader , Dokumentacija OpenCSV