logo

CSV faila lasīšana Java, izmantojot OpenCSV

Komatatdalīto vērtību (CSV) fails ir tikai parasts vienkārša teksta fails, kurā dati tiek glabāti pa kolonnām un sadalīti ar atdalītāju (piemēram, parasti tas ir komats , ).

OpenCSV ir Java CSV parsētāja bibliotēka. OpenCSV atbalsta visas pamata CSV veida darbības, kuras vēlaties veikt. Java 7 pašlaik ir minimāli atbalstītā OpenCSV versija. Java valoda nenodrošina nekādu vietējo atbalstu efektīvai CSV failu apstrādei, tāpēc mēs izmantojam OpenCSV, lai apstrādātu CSV failus Java.

Kā lietot OpenCSV



1. Maven projektam varat iekļaut OpenCSV maven atkarību failā pom.xml.

HTML




<>dependency>>>> <>groupId>>com.opencsvgroupId> opencsvartifactId>4.1version> atkarība>>>

> 

compile group: 'com.opencsv', name: 'opencsv', version: '4.1'>

3. Varat lejupielādēt OpenCSV Jar un iekļaujiet savā projekta klases ceļā.

Dažas noderīgas opencsv klases

    CSVReader — šī klase nodrošina darbības, lai nolasītu CSV failu kā virknes masīva sarakstu. CSVWriter — šī klase ļauj mums ierakstīt datus CSV failā. CsvToBean — šī klase tiks izmantota, ja vēlaties aizpildīt Java pupiņas no CSV faila satura. BeanToCsv – šī klase palīdz eksportēt datus uz CSV failu no jūsu Java lietojumprogrammas.

CSV faila lasīšana

CSV faila lasīšanai nepieciešama CSVReader klase. Tālāk ir sniegts CSV faila paraugs, ko mēs lasīsim.

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>

Mēs varam lasīt csv failu divos veidos:

1. Lasiet datus pēc rindas: Apskatīsim, kā lasīt CSV failu rindiņu pa rindiņai. Lai lasītu datus pēc rindas, vispirms mums ir jākonstruē un jāinicializē CSVReader objekts, nododot CSV faila failu lasītāja objektu. Pēc tam mums ir jāizsauc CSVReader objekta metode readNext (), lai nolasītu datus pēc rindas, kā parādīts zemāk esošajā kodā.

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. Nolasīt visus datus uzreiz: Mēs lasām CSV ierakstus pa vienam, izmantojot metodi readNext (). CSVReader nodrošina arī metodi, ko sauc par readAll(), lai visus ierakstus uzreiz nolasītu sarakstā.

 List allData = csvReader.readAll();>

Kad mēs lasām csv failu pēc noklusējuma, galvene netiks ignorēta, kā parādīts iepriekš minēto kodu izvadē. Ja mums ir jāizlaiž pirmais elements sarakstā, mēs varam norādīt sākuma rindiņu, veidojot CSVReader.

CSVReader csvReader = new CSVReaderBuilder(reader).withSkipLines(1).build();>

Kods:

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();> >}> }>

>

>

CSV faila lasīšana ar dažādu atdalītāju

CSV failus var atdalīt ar atdalītāju, kas nav komats, piemēram, semikols, caurule utt. Šis piemērs parāda, kā nolasīt CSV faila datus, kas atdalīti ar semikolu.

Ar semikolu atdalīta CSV faila piemērs:

java noklusējuma parametri
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>

Pielāgotam atdalītājam tiek izveidots pirmais CSVParser ar noteiktu parsētāja rakstzīmi.

CSVParser parser = new CSVParserBuilder().withSeparator(';').build();>

Pēc tam mēs izveidosim CSVReader objektu ar CSVParser() metodi kopā ar konstruktoru un nodrošināsim izveidoto parsētāja objektu parametram withCSVParser metodei. Beidzot izsaucam build metodi, lai izveidotu objektu.

CSVReader csvReader = new CSVReaderBuilder(filereader).withCSVParser(parser).build();>

Kods:

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();> >}> }>

>

>

Piemērs — tiek lasīti divi csv faili result.csv un results_semicolon_Separator.csv
result.csv ir noklusējuma atdalītājs ', ', bet rezultāti_semicolon_Separator.csv ir atdalītājs ';' ', ' vietā.

Kodi:

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();> >}> >}> }>

>

>

Izvade:

_______________________________________________ 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 _______________________________________________>

Nākamajos rakstos mēs iekļausim vairāk darbību CSV failā, izmantojot OpenCSV.
Atsauces: CSVReader klases dokumentācija , OpenCSV dokumentācija