logo

Llegir un fitxer CSV en Java amb OpenCSV

Un fitxer de valors separats per comes (CSV) és només un fitxer normal de text sense format, emmagatzema dades columna per columna i les divideix mitjançant un separador (per exemple, normalment és una coma , ).

OpenCSV és una biblioteca d'analitzador CSV per a Java. OpenCSV admet totes les operacions bàsiques de tipus CSV que voleu fer. Java 7 és actualment la versió mínima admesa per a OpenCSV. El llenguatge Java no ofereix cap suport natiu per gestionar fitxers CSV de manera eficaç, de manera que estem utilitzant OpenCSV per gestionar fitxers CSV a Java.



Com utilitzar OpenCSV

1. Per al projecte maven, podeu incloure la dependència de maven OpenCSV al fitxer pom.xml.

HTML








<>dependency>>> ><>groupId>>com.opencsvgroupId> opencsvartifactId>Versió 4.1> dependència>>>

>

>

2. Per al projecte Gradle, podeu incloure la dependència OpenCSV.

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

3. Podeu descarregar OpenCSV Jar i incloure a la ruta de classe del vostre projecte.

Algunes classes útils d'opencsv

    CSVReader: aquesta classe proporciona les operacions per llegir el fitxer CSV com una llista de matriu String. CSVWriter: aquesta classe ens permet escriure les dades en un fitxer CSV. CsvToBean: aquesta classe s'utilitzarà quan vulgueu emplenar els vostres beans java a partir d'un contingut d'arxiu CSV. BeanToCsv: aquesta classe ajuda a exportar dades al fitxer CSV des de la vostra aplicació Java.

Lectura del fitxer CSV

Per llegir un fitxer CSV necessiteu la classe CSVReader. A continuació es mostra un fitxer CSV de mostra que llegirem.

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>

Podem llegir el fitxer csv de dues maneres:

1. Llegeix les dades línia per línia: Vegem com llegir el fitxer CSV línia per línia. Per llegir dades línia per línia, primer hem de construir i inicialitzar l'objecte CSVReader passant l'objecte lector de fitxers del fitxer CSV. Després d'això, hem de cridar al mètode readNext() de l'objecte CSVReader per llegir les dades línia per línia, tal com es mostra al codi següent.

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. Llegeix totes les dades alhora: Llegim els registres CSV un per un mitjançant el mètode readNext(). CSVReader també proporciona un mètode anomenat readAll() per llegir tots els registres alhora en una llista.

 List allData = csvReader.readAll();>

Quan llegim el fitxer csv per defecte, la capçalera no s'ignorarà, tal com es mostra a la sortida dels codis anteriors. Quan hem de saltar el primer element de la llista, podem especificar la línia inicial mentre creem CSVReader.

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

Codi:

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

>

>

Llegint un fitxer CSV amb un separador diferent

Els fitxers CSV es poden separar amb un delimitador diferent d'una coma, p. punt i coma, pipe, etc. L'exemple següent mostra com llegir dades d'un fitxer CSV separades per un punt i coma.

Exemple de fitxer CSV separat amb punt i coma:

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>

Per al separador personalitzat es crea el primer CSVParser amb un caràcter analitzador específic.

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

A continuació, crearem un objecte CSVReader amb el mètode CSVParser() juntament amb el constructor i proporcionarem l'objecte analitzador fet al paràmetre del mètode withCSVParser. Finalment, cridarem al mètode de construcció per construir l'objecte.

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

Codi:

Java


matemàtiques java pow



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

>

>

Exemple: lectura de dos fitxers csv result.csv i results_semicolon_Separator.csv
result.csv té un separador per defecte ', ' però results_semicolon_Separator.csv té un separador ';' en lloc de ', '.

Codis:

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

>

>

Sortida:

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

En articles futurs, inclourem més operacions en fitxers CSV amb OpenCSV.
Referències: Documentació de la classe CSVReader , Documentació OpenCSV