Чтение CSV-файла на Java с использованием OpenCSV
Файл со значениями, разделенными запятыми (CSV) - это обычный текстовый файл, в котором данные хранятся по столбцу за столбцом и разделены разделителем (например, обычно это запятая «,»).
OpenCSV - это библиотека парсера CSV для Java. OpenCSV поддерживает все основные операции типа CSV, которые вы хотите выполнить. Java 7 в настоящее время является минимальной поддерживаемой версией для OpenCSV. Язык Java не обеспечивает встроенной поддержки для эффективной обработки файлов CSV, поэтому мы используем OpenCSV для обработки файлов CSV в Java.
Как использовать OpenCSV
- Для проекта maven вы можете включить зависимость OpenCSV maven в файл pom.xml.
<
dependency
>
<
groupId
>com.opencsv</
groupId
>
<
artifactId
>opencsv</
artifactId
>
<
version
>4.1</
version
>
</
dependency
>
- Для Gradle Project вы можете включить зависимость OpenCSV.
группа компиляции: 'com.opencsv', имя: 'opencsv', версия: '4.1'
- Вы можете скачать OpenCSV Jar и включить его в путь класса вашего проекта.
Некоторые полезные классы opencsv
- CSVReader - этот класс обеспечивает операции для чтения файла CSV в виде списка массива String.
- CSVWriter - этот класс позволяет нам записывать данные в файл CSV.
- CsvToBean - этот класс будет использоваться, когда вы хотите заполнить Java-бины из содержимого файла CSV.
- BeanToCsv - этот класс помогает экспортировать данные в файл CSV из вашего Java-приложения.
Чтение файла CSV
Для чтения CSV-файла вам понадобится класс CSVReader. Ниже приведен образец файла CSV, который мы прочитаем.
имя, rollno, отдел, результат, cgpa амар, 42, cse, пасс, 8.6 rohini, 21, ece, неуспешно, 3,2 aman, 23, cse, пас, 8.9 рахул, 45, ее, провал, 4.6 Pratik, 65, cse, pass, 7.2 раунак, 23, я, пас, 9.1 сувам, 68, я, пас, 8.2
Мы можем прочитать CSV-файл двумя способами:
- Чтение данных построчно: давайте посмотрим, как построчно читать CSV-файл. Для чтения данных построчно, сначала мы должны создать и инициализировать объект CSVReader, передав объект чтения файла CSV-файла. После этого мы должны вызвать метод readNext () объекта CSVReader для чтения данных построчно, как показано в приведенном ниже коде.
// 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();
}
}
- Прочитать все данные сразу: мы читаем записи CSV одну за другой, используя метод readNext (). CSVReader также предоставляет метод readAll () для чтения всех записей сразу в список.
Список allData = csvReader.readAll ();
Когда мы читаем файл csv по умолчанию, заголовок не игнорируется, как показано в выводе приведенных выше кодов. Когда нам нужно пропустить первый элемент в списке, мы можем указать начальную строку при создании CSVReader.
CSVReader csvReader = новый CSVReaderBuilder (читатель) .withSkipLines (1) .build ();
Код:
// 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<String[]> 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();
}
}
Чтение CSV-файла с другим разделителем
Файлы CSV могут быть разделены разделителем, отличным от запятой, например, точка с запятой, вертикальная черта и т. Д. В следующем примере показано, как читать данные файла CSV, разделенные точкой с запятой.
Пример файла CSV, разделенного точкой с запятой:
имя; роллно; отдел; результат; cgpa amar; 42; cse; pass; 8,6 rohini; 21; ece; неуспешно; 3,2 aman; 23; cse; pass; 8.9 rahul; 45; ee; fail; 4.6 pratik; 65; cse; pass; 7.2 раунак; 23; мне; пройти; 9,1 сувам; 68; мне; пройти; 8,2
Для пользовательского разделителя создается первый CSVParser с определенным символом парсера.
CSVParser parser = новый CSVParserBuilder (). WithSeparator (';'). Build ();
Затем мы создадим объект CSVReader с помощью метода CSVParser () вместе с конструктором и предоставим созданный объект парсера параметру метода withCSVParser. При последнем вызове метода сборки для создания объекта.
CSVReader csvReader = новый CSVReaderBuilder (читатель файлов) .withCSVParser (парсер) .build ();
Код:
// Java code to illustrate // Reading CSV File with different separator public static void readDataFromCustomSeperator(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 seperator 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<String[]> 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(); } } |
Пример - чтение двух файлов csv result.csv и results_semicolon_Seperator.csv
result.csv имеет разделитель по умолчанию ',' но results_semicolon_Seperator.csv имеет разделитель ';' на месте ', '.
Коды:
// Java program to illustrate reading // two CSV files // with different seperators import java.io.FileReader; import java.util.List; import com.opencsv.*; public class ReadCSVData { private static final String CSV_FILE_PATH = "D:\EclipseWorkSpace\CSVOperations\results.csv" ; private static final String CSV_FILE_CUSTOM_SEPERATOR = "D:\EclipseWorkSpace\CSVOperations\results_semicolon_Seperator.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 Seperator here semi-colon
" ); readDataFromCustomSeperator(CSV_FILE_CUSTOM_SEPERATOR); 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<String[]> 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 readDataFromCustomSeperator(String file) { try { // Create object of filereader // class with csv file as parameter. FileReader filereader = new FileReader(file); // create csvParser object with // custom seperator 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<String[]> 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(); } } } |
Выход:
_______________________________________________ Прочитать данные строка за строкой с заголовком имя роллно отдел результат cgpa amar 42 cse pass 8.6 rohini 21 ece сбой 3,2 aman 23 cse pass 8.9 rahul 45 ee фейл 4.6 Pratik 65 cse pass 7.2 раунак 23 мне пройти 9.1 сувам 68 мне пройти 8,2 _______________________________________________ Прочитать все данные сразу и также скрыть заголовок amar 42 cse pass 8.6 rohini 21 ece сбой 3,2 aman 23 cse pass 8.9 rahul 45 ee фейл 4.6 Pratik 65 cse pass 7.2 раунак 23 мой пас 9.1 сувам 68 мне пройти 8,2 _______________________________________________ Пользовательский разделитель здесь точка с запятой имя роллно отдел результат cgpa amar 42 cse pass 8.6 rohini 21 ece сбой 3,2 aman 23 cse pass 8.9 rahul 45 ee фейл 4.6 Pratik 65 cse pass 7.2 раунак 23 мне пройти 9.1 сувам 68 мне пройти 8,2 _______________________________________________
В будущие статьи мы добавим больше операций с CSV-файлом с помощью OpenCSV.
Ссылки: Документация по классу CSVReader, Документация OpenCSV.
Вниманию читателя! Не прекращайте учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса "Основы Java и Java Collections" по приемлемой для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .