logo

Čtení souboru CSV v Javě pomocí OpenCSV

Soubor CSV (Comma-Separated Values) je obyčejný prostý textový soubor, data se ukládají ve sloupcích po sloupcích a rozdělují je oddělovačem (např. normálně je to čárka , ).

OpenCSV je knihovna analyzátoru CSV pro Javu. OpenCSV podporuje všechny základní operace typu CSV, které chcete dělat. Java 7 je aktuálně minimální podporovaná verze pro OpenCSV. Jazyk Java neposkytuje žádnou nativní podporu pro efektivní práci se soubory CSV, takže pro zpracování souborů CSV v Javě používáme OpenCSV.

Jak používat OpenCSV



1. U projektu maven můžete do souboru pom.xml zahrnout závislost maven OpenCSV.

HTML




<>dependency>>> ><>groupId>>com.opencsvgroupId> opencsvartifactId>4.1verze> závislost>>

>

c program pro porovnání řetězců
>

2. Pro Gradle Project můžete zahrnout závislost OpenCSV.

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

3. Můžete si stáhnout OpenCSV Jar a zahrnout do cesty třídy projektu.

Některé užitečné třídy opencsv

    CSVReader – Tato třída poskytuje operace pro čtení souboru CSV jako seznamu pole String. CSVWriter – Tato třída nám umožňuje zapisovat data do souboru CSV. CsvToBean – Tato třída se použije, když chcete naplnit své java beany z obsahu souboru CSV. BeanToCsv – Tato třída pomáhá exportovat data do souboru CSV z vaší java aplikace.

Čtení souboru CSV

Pro čtení souboru CSV potřebujete třídu CSVReader. Následuje ukázkový soubor CSV, který si přečteme.

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>

Soubor csv můžeme číst dvěma způsoby:

1. Přečtěte si data řádek po řádku: Podívejme se, jak číst soubor CSV řádek po řádku. Pro čtení dat řádek po řádku musíme nejprve zkonstruovat a inicializovat objekt CSVReader předáním objektu filereader souboru CSV. Poté musíme zavolat metodu readNext() objektu CSVReader pro čtení dat řádek po řádku, jak je znázorněno v kódu níže.

Jáva




document.queryselector

// 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. Přečtěte si všechna data najednou: Záznamy CSV čteme jeden po druhém pomocí metody readNext(). CSVReader také poskytuje metodu nazvanou readAll() pro načtení všech záznamů najednou do seznamu.

 List allData = csvReader.readAll();>

Když čteme soubor csv ve výchozím nastavení, záhlaví nebude ignorováno, jak je ukázáno ve výstupu výše uvedených kódů. Když potřebujeme přeskočit první prvek v seznamu, můžeme zadat počáteční řádek při vytváření CSVReader.

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

Kód:

Jáva




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

>

>

Čtení souboru CSV s jiným oddělovačem

Soubory CSV lze oddělit jiným oddělovačem než čárkou, např. středník, svislá čára atd. Následující příklad ukazuje, jak číst data CSV souboru oddělená středníkem.

Příklad souboru CSV odděleného středníkem:

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>

Pro Vlastní oddělovač je vytvořen první CSVParser se specifickým znakem analyzátoru.

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

Poté vytvoříme objekt CSVReader s metodou CSVParser() spolu s konstruktorem a poskytneme vytvořený objekt parser parametru metody withCSVParser. Nakonec zavoláme metodu build pro sestavení objektu.

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

Kód:

Jáva




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

>

>

execvp

Příklad – Čtení dvou souborů csv result.csv a results_semicolon_Separator.csv
result.csv má výchozí oddělovač ‘, ‘, ale results_semicolon_Separator.csv má oddělovač ‘;’ místo ‘, ‘.

kódy:

Jáva




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

>

>

Výstup:

_______________________________________________ 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 budoucích článcích zahrneme více operací se souborem CSV pomocí OpenCSV.
Reference: Dokumentace třídy CSVReader , Dokumentace OpenCSV