Автор оригинала: Pankaj Kumar.
Мотивация SuperCSV заключается в том, чтобы быть передовым, быстрым и наиболее удобным для программиста бесплатным CSV-пакетом для Java. К сожалению, у нас нет встроенного анализатора CSV на java.
Суперсв
В java существует множество анализаторов CSV с открытым исходным кодом. Но супер CSVparser-мой любимый. Мощь супер CSV-анализатора заключается в Сотовом процессоре , который предоставляет множество функций. Вы можете указать значение столбца, которое не должно быть Нулевым, Необязательным, Уникальным. Процессоры ячеек SuperCSV также поддерживают преобразование даты и времени, время Joda, перечисление и т.д.
Сегодня мы рассмотрим пример SuperCSV для чтения CSV-файла и преобразования его в список объектов java. Мы также быстро рассмотрим пример программы Super CSV для записи данных CSV.
Прежде чем мы рассмотрим пример, мы должны создать образец данных CSV и соответствующий компонент java.
1,Pankaj Kumar,20,India 2,David Dan,40,USA 3,Lisa Ray,28,Germany
Наш соответствующий класс javabean-это Сотрудник.java , как определено ниже.
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 + "}";
}
}
Суперзвезда Maven
Добавьте нижеприведенную зависимость в свой проект maven pom.xml файл для получения супер CSV-файла.
net.sf.supercsv super-csv 2.4.0
SuperCSV CsvBeanReader
Вот простой пример программы SuperCSV, использующей CsvBeanReader для анализа списка данных CSV объекта java.
package com.journaldev.csv.supercsv.parser;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.supercsv.cellprocessor.Optional;
import org.supercsv.cellprocessor.constraint.NotNull;
import org.supercsv.cellprocessor.constraint.UniqueHashCode;
import org.supercsv.cellprocessor.ift.CellProcessor;
import org.supercsv.io.CsvBeanReader;
import org.supercsv.io.ICsvBeanReader;
import org.supercsv.prefs.CsvPreference;
import com.journaldev.csv.model.Employee;
public class SuperCSVParserExample {
public static void main(String[] args) throws IOException {
List emps = new ArrayList();
ICsvBeanReader beanReader = new CsvBeanReader(new FileReader("emps.csv"), CsvPreference.STANDARD_PREFERENCE);
// the name mapping provide the basis for bean setters
final String[] nameMapping = new String[] { "id", "name", "age", "country" };
//to read and skip header row
//final String[] header = beanReader.getHeader(true);
final CellProcessor[] processors = getProcessors();
Employee emp;
while ((emp = beanReader.read(Employee.class, nameMapping, processors)) != null) {
emps.add(emp);
}
System.out.println(emps);
beanReader.close();
}
private static CellProcessor[] getProcessors() {
final CellProcessor[] processors = new CellProcessor[] {
new UniqueHashCode(), // ID
new NotNull(), // Name
new Optional(), // Age
new NotNull() // Country
};
return processors;
}
}
Программа проста для понимания, наиболее важной частью является создание супер-процессоров CSV-ячеек.
Если ваш CSV-файл содержит строку заголовка, используйте beanReader.getHeader(true) для чтения и пропуска заголовка для обработки.
SuperCSV CsvBeanWriter
Простой пример Супер CSV с использованием CsvBeanWriter для записи данных CSV. Я предполагаю, что поля возраста и страны являются необязательными.
package com.journaldev.csv.supercsv.parser;
import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import org.supercsv.cellprocessor.Optional;
import org.supercsv.cellprocessor.constraint.NotNull;
import org.supercsv.cellprocessor.constraint.UniqueHashCode;
import org.supercsv.cellprocessor.ift.CellProcessor;
import org.supercsv.io.CsvBeanWriter;
import org.supercsv.io.ICsvBeanWriter;
import org.supercsv.prefs.CsvPreference;
import com.journaldev.csv.model.Employee;
public class SuperCSVWriterExample {
public static void main(String[] args) throws IOException {
List emps = generateDemoData();
StringWriter writer = new StringWriter();
ICsvBeanWriter beanWriter = new CsvBeanWriter(writer, CsvPreference.STANDARD_PREFERENCE);
final String[] header = new String[] { "id", "name", "age", "country" };
final CellProcessor[] processors = getProcessors();
// write the header
beanWriter.writeHeader(header);
// write the beans data
for (Employee emp : emps) {
beanWriter.write(emp, header, processors);
}
beanWriter.close();
System.out.println("CSV Data\n" + writer.toString());
}
private static CellProcessor[] getProcessors() {
final CellProcessor[] processors = new CellProcessor[] { new UniqueHashCode(), // ID
new NotNull(), // Name
new Optional(), // Age
new Optional() // Country
};
return processors;
}
private static List generateDemoData() {
List emps = new ArrayList<>();
Employee emp = new Employee();
emp.setId("1");
emp.setName("Pankaj Kumar");
emp.setAge("30"); // country is optional and not set
Employee emp1 = new Employee();
emp1.setId("2");
emp1.setName("David");
emp1.setCountry("USA"); // age is optional
Employee emp2 = new Employee();
emp2.setId("3");
emp2.setName("Lisa");
emp2.setAge("20");
emp2.setCountry("India");
emps.add(emp);
emps.add(emp1);
emps.add(emp2);
return emps;
}
}
Вышеуказанная программа производит вывод ниже CSV.
CSV Data id,name,age,country 1,Pankaj Kumar,30, 2,David,,USA 3,Lisa,20,India
Если вам не нужна строка заголовка, то прокомментируйте код beanWriter.напишите заголовок(заголовок) в приведенной выше программе.
Если вышеуказанная программа будет изменена, чтобы сохранить идентификатор двух объектов сотрудника одинаковым, то мы получим приведенное ниже исключение.
Exception in thread "main" org.supercsv.exception.SuperCsvConstraintViolationException: duplicate value '2' encountered with hashcode 50
processor=org.supercsv.cellprocessor.constraint.UniqueHashCode
context={lineNo=4, rowNo=4, columnNo=1, rowSource=[2, Lisa, 20, India]}
at org.supercsv.cellprocessor.constraint.UniqueHashCode.execute(UniqueHashCode.java:78)
at org.supercsv.util.Util.executeCellProcessors(Util.java:93)
at org.supercsv.io.CsvBeanWriter.write(CsvBeanWriter.java:136)
at com.journaldev.csv.supercsv.parser.SuperCSVWriterExample.main(SuperCSVWriterExample.java:33)
Причина в том, что мы определили столбец идентификатора с ограничением уникального хэш-кода. Это очень уникальная и важная функция, отсутствующая во всех других анализаторах CSV в java.
Это все для быстрого урока по СуперКСВ.
Ссылка: Домашняя страница SuperCSV