Súbor CSV (Comma-Separated Values) je len obyčajným textovým súborom, údaje sa ukladajú v stĺpcoch po stĺpcoch a rozdeľujú sa oddeľovačom (napr. normálne je to čiarka , ).
konverzia dátumu na reťazec
OpenCSV je knižnica analyzátora CSV pre Javu. OpenCSV podporuje všetky základné operácie typu CSV, ktoré chcete robiť. Java 7 je v súčasnosti minimálna podporovaná verzia pre OpenCSV. Jazyk Java neposkytuje žiadnu natívnu podporu pre efektívne spracovanie súborov CSV, takže na spracovanie súborov CSV v jazyku Java používame OpenCSV.
Ako používať OpenCSV
1. Pre projekt maven môžete do súboru pom.xml zahrnúť závislosť maven OpenCSV.
HTML
<>dependency>>> ><>groupId>>com.opencsvgroupId> |
>
>
2. Pre Gradle Project môžete zahrnúť závislosť OpenCSV.
compile group: 'com.opencsv', name: 'opencsv', version: '4.1'>
3. Môžete si stiahnuť OpenCSV Jar a zahrnúť do cesty triedy projektu.
Niektoré užitočné triedy opencsv
- CSVReader – Táto trieda poskytuje operácie na čítanie súboru CSV ako zoznamu poľa String. CSVWriter – Táto trieda nám umožňuje zapisovať údaje do súboru CSV. CsvToBean – Táto trieda sa použije, keď chcete naplniť svoje java beans z obsahu súboru CSV. BeanToCsv – Táto trieda pomáha exportovať údaje do súboru CSV z vašej aplikácie Java.
Čítanie súboru CSV
Na čítanie súboru CSV potrebujete triedu CSVReader. Nasleduje vzorový súbor CSV, ktorý si prečítame.
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>
Súbor csv môžeme čítať dvoma spôsobmi:
1. Prečítajte si údaje riadok po riadku: Pozrime sa, ako čítať súbor CSV riadok po riadku. Na čítanie údajov riadok po riadku musíme najprv skonštruovať a inicializovať objekt CSVReader odovzdaním objektu filereader súboru CSV. Potom musíme zavolať metódu readNext() objektu CSVReader na čítanie údajov riadok po riadku, ako je uvedené v kóde nižšie.
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. Prečítajte si všetky údaje naraz: Záznamy CSV čítame jeden po druhom pomocou metódy readNext(). CSVReader tiež poskytuje metódu s názvom readAll() na čítanie všetkých záznamov naraz do zoznamu.
List allData = csvReader.readAll();>
Keď štandardne čítame súbor csv, hlavička nebude ignorovaná, ako je znázornené na výstupe vyššie uvedených kódov. Keď potrebujeme preskočiť prvý prvok v zozname, môžeme pri vytváraní CSVReader zadať počiatočný riadok.
CSVReader csvReader = new CSVReaderBuilder(reader).withSkipLines(1).build();>
kód:
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();> >}> }> |
>
>
Čítanie súboru CSV s iným oddeľovačom
Súbory CSV je možné oddeliť iným oddeľovačom ako čiarkou, napr. bodkočiarka, zvislá čiara atď. Nasledujúci príklad ukazuje, ako čítať údaje zo súboru CSV oddelené bodkočiarkou.
Príklad súboru CSV oddeleného bodkočiarkou:
práca na počítači
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>
Pre vlastný oddeľovač sa vytvorí prvý CSVParser so špecifickým znakom syntaktického analyzátora.
CSVParser parser = new CSVParserBuilder().withSeparator(';').build();> Potom vytvoríme objekt CSVReader pomocou metódy CSVParser() spolu s konštruktorom a vytvorený objekt parseru poskytneme parametru metódy withCSVParser. Nakoniec zavoláme metódu build na zostavenie objektu.
CSVReader csvReader = new CSVReaderBuilder(filereader).withCSVParser(parser).build();>
kód:
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();> >}> }> |
>
>
Príklad – Čítanie dvoch súborov csv result.csv a results_semicolon_Separator.csv
result.csv má predvolený oddeľovač ‘, ‘, ale results_semicolon_Separator.csv má oddeľovač ‘;’ namiesto ‘, ‘.
kódy:
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();> >}> >}> }> |
>
>
Výkon:
_______________________________________________ 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 budúcich článkoch zahrnieme viac operácií so súborom CSV pomocou OpenCSV.
Referencie: Dokumentácia triedy CSVReader , Dokumentácia OpenCSV