Plik wartości rozdzielanych przecinkami (CSV) to zwykły plik tekstowy, przechowujący dane kolumna po kolumnie i dzielący je separatorem (np. zwykle jest to przecinek , ).
OpenCSV to biblioteka parsera CSV dla języka Java. OpenCSV obsługuje wszystkie podstawowe operacje typu CSV, które chcesz wykonać. Java 7 jest obecnie minimalną obsługiwaną wersją OpenCSV. Język Java nie zapewnia żadnej natywnej obsługi efektywnej obsługi plików CSV, dlatego do obsługi plików CSV w Javie używamy OpenCSV.
Jak korzystać z OpenCSV
1. W przypadku projektu maven możesz uwzględnić zależność maven OpenCSV w pliku pom.xml.
sts pobierz
HTML
<>dependency>>> ><>groupId>>com.opencsvgroupId> |
>
>
2. W przypadku projektu Gradle możesz uwzględnić zależność OpenCSV.
compile group: 'com.opencsv', name: 'opencsv', version: '4.1'>
3. Możesz pobrać Słój OpenCSV i dołącz do ścieżki klasy projektu.
Kilka przydatnych klas opencsv
- CSVReader – ta klasa udostępnia operacje umożliwiające odczyt pliku CSV jako listy tablicy ciągów. CSVWriter – Klasa ta pozwala nam zapisać dane do pliku CSV. CsvToBean — ta klasa będzie używana, jeśli chcesz zapełnić komponenty Java Bean zawartością pliku CSV. BeanToCsv – ta klasa pomaga eksportować dane do pliku CSV z aplikacji Java.
Czytanie pliku CSV
Do odczytania pliku CSV potrzebna jest klasa CSVReader. Poniżej znajduje się przykładowy plik CSV, który przeczytamy.
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>
Plik csv możemy odczytać na dwa sposoby:
1. Czytaj dane linia po linii: Zobaczmy, jak czytać plik CSV linia po linii. Aby odczytać dane linia po linii, najpierw musimy skonstruować i zainicjować obiekt CSVReader, przekazując obiekt filereader z pliku CSV. Następnie musimy wywołać metodę readNext() obiektu CSVReader, aby odczytać dane linia po linii, jak pokazano w poniższym kodzie.
Jawa
// 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. Przeczytaj wszystkie dane na raz: Rekordy CSV czytamy jeden po drugim za pomocą metody readNext(). CSVReader udostępnia również metodę o nazwie readAll(), która umożliwia jednoczesne wczytanie wszystkich rekordów na listę.
List allData = csvReader.readAll();>
Kiedy domyślnie czytamy plik csv, nagłówek nie zostanie zignorowany, jak pokazano na wyjściu powyższych kodów. Kiedy musimy pominąć pierwszy element na liście, możemy określić linię startu podczas tworzenia CSVReadera.
CSVReader csvReader = new CSVReaderBuilder(reader).withSkipLines(1).build();>
Kod:
Jawa
// 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();> >}> }> |
spróbuj złapać Javę
>
>
Odczytywanie pliku CSV z innym separatorem
Pliki CSV można oddzielić ogranicznikiem innym niż przecinek, np. średnik, kreska itp. Poniższy przykład pokazuje jak odczytać dane z pliku CSV oddzielone średnikiem.
Przykład pliku CSV oddzielonego średnikami:
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>
Dla separatora niestandardowego tworzony jest pierwszy CSVParser z określonym znakiem analizatora.
CSVParser parser = new CSVParserBuilder().withSeparator(';').build();> Następnie utworzymy obiekt CSVReader za pomocą metody CSVParser() wraz z konstruktorem i podamy utworzony obiekt parsera do parametru metody withCSVParser. Na koniec wywołamy metodę build, aby zbudować obiekt.
CSVReader csvReader = new CSVReaderBuilder(filereader).withCSVParser(parser).build();>
Kod:
Jawa
// 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();> >}> }> |
>
>
Przykład – Odczyt dwóch plików csvresult.csv iresults_semicolon_Separator.csv
wynik.csv ma domyślny separator „,”, ale plik wyników_semicolon_Separator.csv ma separator „;” zamiast „,”.
Kody:
Jawa
// 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();> >}> >}> }> |
>
>
Wyjście:
_______________________________________________ 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 _______________________________________________>
W przyszłych artykułach zamieścimy więcej operacji na pliku CSV przy użyciu OpenCSV.
Bibliografia: Dokumentacja klasy CSVReader , Dokumentacja OpenCSV