Рубрики
Без рубрики

SuperCSV – CsvBeanReader, сотовый процессор, CsvBeanWriter

Пример учебника по SuperCSV. Пример записи для чтения супер CSV с использованием CsvBeanReader, CsvBeanWriter. Сотовый процессор SuperCSV Не Нулевой, Необязательный, Уникальный Хэш-Код

Автор оригинала: 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