logo

Läser en CSV-fil i Java med OpenCSV

En CSV-fil (Comma-Separated Values) är bara en vanlig vanlig textfil, lagra data i kolumn för kolumn och dela upp den med en avgränsare (t.ex. normalt är det ett kommatecken , ).

OpenCSV är ett CSV-parserbibliotek för Java. OpenCSV stöder alla grundläggande CSV-operationer du vill göra. Java 7 är för närvarande den minsta versionen som stöds för OpenCSV. Java-språket ger inget inbyggt stöd för att effektivt hantera CSV-filer så vi använder OpenCSV för att hantera CSV-filer i Java.



Hur man använder OpenCSV

1. För maven-projektet kan du inkludera OpenCSV-maven-beroendet i filen pom.xml.

HTML








<>dependency>>> ><>groupId>>com.opencsvgroupId> opencsvartifactId>4.1version> beroende>>

faktoriell java

>

>

2. För Gradle Project kan du inkludera OpenCSV-beroendet.

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

3. Du kan ladda ner OpenCSV Jar och inkludera i din projektklassväg.

Några användbara klasser av opencsv

    CSVReader – Den här klassen tillhandahåller operationerna för att läsa CSV-filen som en lista över String-arrayer. CSVWriter – Denna klass låter oss skriva data till en CSV-fil. CsvToBean – Den här klassen kommer att användas när du vill fylla i dina javabönor från ett CSV-filinnehåll. BeanToCsv – Den här klassen hjälper till att exportera data till CSV-fil från din java-applikation.

Läser CSV-fil

För att läsa en CSV-fil behöver du CSVReader-klassen. Följande är exempel på CSV-fil som vi kommer att läsa.

if-else uttalande java
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>

Vi kan läsa csv-filen på två sätt:

1. Läs data rad för rad: Låt oss se hur man läser CSV-fil rad för rad. För att läsa data rad för rad måste vi först konstruera och initiera CSVReader-objektet genom att skicka filläsarobjektet för CSV-filen. Efter det måste vi anropa readNext()-metoden för CSVReader-objektet för att läsa data rad för rad som visas i koden nedan.

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. Läs all data på en gång: Vi läser CSV-posterna en efter en med metoden readNext(). CSVReader tillhandahåller också en metod som kallas readAll() för att läsa alla poster samtidigt till en lista.

 List allData = csvReader.readAll();>

När vi läser csv-fil som standard ignoreras inte headern, som visas i utdata av ovanstående koder. När vi behöver hoppa över det första elementet i listan kan vi ange startrad när vi skapar CSVReader.

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

>

>

Läser CSV-fil med annan separator

CSV-filer kan separeras med en annan avgränsare än kommatecken, t.ex. semikolon, pipe etc. Följande exempel visar hur man läser data i CSV-filen separerade med ett semikolontecken.

excel ta bort första tecknet

Exempel på separerad CSV-fil med semikolon:

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>

För anpassad separator skapas den första CSVParser med ett specifikt parsertecken.

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

Sedan kommer vi att skapa CSVReader-objektet med CSVParser()-metoden tillsammans med konstruktorn och tillhandahålla parametern som gjorts parser-objekt till withCSVParser-metoden.

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

>

>

Exempel – Läser två csv-filer result.csv och results_semicolon_Separator.csv
result.csv har standardavgränsare ', ' men results_semicolon_Separator.csv har en separator ';' i stället för ', '.

Koder:

Java


java system.out.println



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

>

>

Produktion:

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

I framtida artiklar kommer vi att inkludera fler operationer på CSV-fil med OpenCSV.
Referenser: CSVReader-klass Dokumentation , OpenCSV-dokumentation