Автор оригинала: Pankaj Kumar.
OpenCSV-это легкий анализатор CSV java. Сегодня мы рассмотрим пример Opencv для анализа CSV.
OpenCSV
Opencv предоставляет большинство основных функций для анализа CSV. OpenCSV более популярен, потому что у нас нет встроенного CSV-анализатора на java. Некоторые из важных классов в OpenCSV CSVparser являются;
Читатель CSV
: Это самый важный класс в Opencv. Класс CSVReader используется для анализа CSV-файлов. Мы можем анализировать данные CSV строка за строкой или читать все данные сразу.CSVWriter
: Класс CSVWriter используется для записи данных CSV в реализацию Writer. Вы можете определить пользовательский разделитель, а также кавычки.CsvToBean
: CsvToBean используется, когда вы хотите преобразовать данные CSV в объекты java.BeanToCsv
: BeanToCsv используется для экспорта компонентов Java в файл CSV.
Зависимость OpenCSV Maven
Вы можете добавить банку OpenCSV, используя приведенную ниже зависимость maven.
com.opencsv opencsv 3.8
Прежде чем мы начнем рассматривать пример программы, нам потребуются демонстрационные данные CSV и соответствующий компонент java.
Вот наш пример CSV-файла emps.csv
1,Pankaj Kumar,20,India 2,David Dan,40,USA 3,Lisa Ray,28,Germany
Ниже приведен наш класс java-компонентов для хранения данных CSV.
package com.journaldev.csv.model; public class Employee { private String id; private String name; private String age; private String country; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } @Override public String toString() { return "{" + id + "::" + name + "::" + age + "::" + country + "}"; } }
Давайте рассмотрим некоторые распространенные примеры синтаксического анализа CSV и записи CSV.
CSVReader
Наш первый пример CSVReader-это чтение строк CSV-файла по одной, а затем преобразование в список сотрудников.
package com.journaldev.csv.opencsv.parser; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; import com.journaldev.csv.model.Employee; import com.opencsv.CSVReader; /** * OpenCSV CSVReader Example, Read line by line * * @author pankaj * */ public class OpenCSVReaderLineByLineExample { public static void main(String[] args) throws IOException { CSVReader reader = new CSVReader(new FileReader("emps.csv"), ','); Listemps = new ArrayList (); // read line by line String[] record = null; while ((record = reader.readNext()) != null) { Employee emp = new Employee(); emp.setId(record[0]); emp.setName(record[1]); emp.setAge(record[2]); emp.setCountry(record[3]); emps.add(emp); } System.out.println(emps); reader.close(); } }
Приведенный выше пример CSVReader прост для понимания. Одним из важных моментов является закрытие CSVReader, чтобы избежать утечки памяти. Также мы можем указать символ-разделитель, на случай, если вы используете что-то другое.
Следующий пример CSVReader-считывание всех данных одним кадром с помощью метода CSVReader ReadAll ()
.
package com.journaldev.csv.opencsv.parser; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.journaldev.csv.model.Employee; import com.opencsv.CSVReader; /** * OpenCSV CSVReader Example, Read all at once * * @author pankaj * */ public class OpenCSVReaderReadAllExample { public static void main(String[] args) throws IOException { CSVReader reader = new CSVReader(new FileReader("emps.csv"), ','); Listemps = new ArrayList (); List records = reader.readAll(); Iterator iterator = records.iterator(); while (iterator.hasNext()) { String[] record = iterator.next(); Employee emp = new Employee(); emp.setId(record[0]); emp.setName(record[1]); emp.setAge(record[2]); emp.setCountry(record[3]); emps.add(emp); } System.out.println(emps); reader.close(); } }
CsvToBean
Большую часть времени мы хотим конвертировать CSV в объект java. В этих случаях мы можем использовать CsvToBean. Ниже приведен простой пример, показывающий, как преобразовать наш CSV-файл сотрудника в список объектов сотрудника.
package com.journaldev.csv.opencsv.parser; import java.io.FileReader; import java.io.IOException; import java.util.List; import com.journaldev.csv.model.Employee; import com.opencsv.CSVReader; import com.opencsv.bean.ColumnPositionMappingStrategy; import com.opencsv.bean.CsvToBean; import com.opencsv.bean.HeaderColumnNameMappingStrategy; public class OpenCSVParseToBeanExample { public static void main(String[] args) throws IOException { CSVReader reader = new CSVReader(new FileReader("emps.csv"), ','); ColumnPositionMappingStrategybeanStrategy = new ColumnPositionMappingStrategy (); beanStrategy.setType(Employee.class); beanStrategy.setColumnMapping(new String[] {"id","name","age","country"}); CsvToBean csvToBean = new CsvToBean (); List emps = csvToBean.parse(beanStrategy, reader); System.out.println(emps); } }
ColumnPositionMappingStrategy
используется для сопоставления индекса строки данных CSV с полями объекта сотрудника.
Иногда наш CSV-файл также содержит данные заголовка, например, у нас может быть emps1.csv
, как показано ниже.
ID,NAME,age, country 1,Pankaj Kumar,20,India 2,David Dan,40,USA 3,Lisa Ray,28,Germany
В этом случае мы можем использовать HeaderColumnNameMappingStrategy
в качестве реализации стратегии сопоставления. Ниже приведен метод, показывающий использование HeaderColumnNameMappingStrategy.
// returning list of Employee for CSVWriter example demo data public static ListparseCSVWithHeader() throws IOException { CSVReader reader = new CSVReader(new FileReader("emps1.csv"), ','); HeaderColumnNameMappingStrategy beanStrategy = new HeaderColumnNameMappingStrategy (); beanStrategy.setType(Employee.class); CsvToBean csvToBean = new CsvToBean (); List emps = csvToBean.parse(beanStrategy, reader); System.out.println(emps); reader.close(); return emps; }
CSVWriter
Давайте рассмотрим пример CSVWriter для записи объектов java в CSV-файл для записи. Мы будем повторно использовать анализировать CSV С помощью заголовка ()
, определенного выше.
package com.journaldev.csv.opencsv.parser; import java.io.IOException; import java.io.StringWriter; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.journaldev.csv.model.Employee; import com.opencsv.CSVWriter; public class OpenCSVWriterExample { public static void main(String[] args) throws IOException { StringWriter writer = new StringWriter(); //using custom delimiter and quote character CSVWriter csvWriter = new CSVWriter(writer, '#', '\''); Listemps = OpenCSVParseToBeanExample.parseCSVWithHeader(); List data = toStringArray(emps); csvWriter.writeAll(data); csvWriter.close(); System.out.println(writer); } private static List toStringArray(List emps) { List records = new ArrayList (); // adding header record records.add(new String[] { "ID", "Name", "Age", "Country" }); Iterator it = emps.iterator(); while (it.hasNext()) { Employee emp = it.next(); records.add(new String[] { emp.getId(), emp.getName(), emp.getAge(), emp.getCountry() }); } return records; } }
Обратите внимание на использование пользовательского разделителя при записи данных CSV. Мы также указали символ кавычек для использования с полями в столбцах CSV. Приведенный выше пример CSVWriter выдает следующий результат.
[{1::Pankaj Kumar::20::India}, {2::David Dan::40::USA}, {3::Lisa Ray::28::Germany}] 'ID'#'Name'#'Age'#'Country' '1'#'Pankaj Kumar'#'20'#'India' '2'#'David Dan'#'40'#'USA' '3'#'Lisa Ray'#'28'#'Germany'
Набор результатов OpenCSV CSVWriter
Иногда мы хотим сбросить данные таблиц нашей базы данных в CSV-файлы в качестве резервной копии. Мы можем легко это сделать, используя CSVWriter написать все(набор результатов rs, логические имена столбцов)
метод.
Аннотация OpenCSV
Opencv также предоставляет поддержку на основе аннотаций. Некоторые из аннотаций OpenCSV являются;
CsvBindByName
: для привязки между именем столбца ввода CSV и полем в компоненте.CsvBindByPosition
: для привязки между номером столбца входных данных CSV и полем в компоненте.Данные Csv
: для преобразования по времени.
Однако я не хочу использовать аннотации OpenCSV, потому что тогда мой код будет тесно связан с OpenCSV.
Это все для примера учебника по Opencv.
Ссылка: Официальная Страница Opencv