Статьи

Операции CSV с использованием OpenCSV

OpenCSV — один из лучших инструментов для работы с CSV. Мы увидим, как использовать OpenCSV для базовых операций чтения и записи.

Как пользоваться

Зависимость Maven для OpenCSV выглядит следующим образом:

     <dependency>
<groupId>net.sf.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>2.3</version>
     </dependency>

Что это обеспечивает

  • CSVReader:  предоставляет операции для чтения файла CSV в виде списка массива String. Может использоваться вместе с CsvToBean для чтения данных в виде списка компонентов
  • CSVWriter:  позволяет записывать данные в файл CSV.
  • CsvToBean: считывает  данные CSV и покрывает объект EJB, используя  MappingStrategy .
  • MappingStrategy:  это интерфейс для определения соответствия между данными, записываемыми в заголовок CSV. Это было реализовано  HeaderColumnNameMappingStrategy ,   ColumnPositionMappingStrategy  и  HeaderColumnNameTranslateMappingStrategy  для соответствующих форматов отображения. 

Запись в файл CSV

Ниже приведен пример написания файла CSV с использованием CSVWriter

        String csv = "/tmp/employee.csv";
        CSVWriter writer = new CSVWriter(new FileWriter(csv));

        String[] header= new String[]{"Name","Age","Salary","Address"};
        writer.writeNext(header);

        List<String[]> allData = new ArrayList<String[]>();
        for(int i=0;i<3;i++)
        {
            String[] data = new String[]{"Blogger"+i,"20"+i,"20.0002",i+" World Wide Web"};
            allData.add(data);
        }

        writer.writeAll(allData);
        writer.close();

Точки, которые следует отметить

  • CSVWriter может писать построчно, используя writeNext
  • writeAll может использоваться для записи полных данных CSV одновременно.
  • По умолчанию разделителем будет запятая (,). Если вы хотите сделать другой символ в качестве разделителя, мы можем передать его в качестве аргумента.
  • Максимально возможная подпись конструктора:
    public CSVWriter(Writer writer, char separator, char quotechar, char escapechar)

Вывод

"Name","Age","Salary","Address"
"Blogger0","200","20.0002","0 World Wide Web"
"Blogger1","201","20.0002","1 World Wide Web"
"Blogger2","202","20.0002","2 World Wide Web"

Чтение из файла CSV

Чтение CSV может быть сделано двумя способами. Один как список строкового массива или как бин.

Чтение как массив

        CSVReader csvReader = new CSVReader(new FileReader("/tmp/employee.csv"));
        List<String[]> allData = csvReader.readAll();

        for(String[] data : allData)
        {
            for(String s : data)
            {
                System.out.print(s+";");
            }
            System.out.println();
        }

        csvReader.close();

Точки, которые следует отметить

  • Как и CSVWriter, CSVReader также предоставляет методы readNext и readAll для чтения одной строки или полных данных соответственно, и при чтении файла можно указать разделитель (кроме запятой (,)). 
  • Кроме того, мы можем установить пропуски, пропускаемые по умолчанию строки, специальные символы кавычек и т. Д. При чтении файла CSV.
  • Когда мы читаем как массив строк, заголовок не будет проигнорирован. Поэтому нам нужно пропустить первый элемент в списке или мы можем указать начальную строку при создании CSVReader. Смотрите вывод ниже

Вывод

Name;Age;Salary;Address;
Blogger0;200;20.0002;0 World Wide Web;
Blogger1;201;20.0002;1 World Wide Web;
Blogger2;202;20.0002;2 World Wide Web;

Чтение как боб

Данные CSV могут быть считаны в bean-компонент, но нам нужно определить стратегию отображения и передать стратегию в CsvToBean для анализа данных в bean-компоненте.

        Map<String, String> mapping = new HashMap<String, String>();
        mapping.put("Name", "name");
        mapping.put("Age", "age");
        mapping.put("Salary", "salary");
        mapping.put("address", "Address");

        HeaderColumnNameTranslateMappingStrategy<Employee> strategy = new HeaderColumnNameTranslateMappingStrategy<Employee>();
        strategy.setType(Employee.class);
        strategy.setColumnMapping(mapping);

        CSVReader csvReader = new CSVReader(new FileReader("/tmp/employee.csv"));
        CsvToBean<Employee> csvToBean = new CsvToBean<Employee>();
        List<Employee> list = csvToBean.parse(strategy, csvReader);

        for(Employee e : list)
        {
            System.out.println(e);
        }

Точки, которые следует отметить 

  • Здесь мы использовали HeaderColumnNameTranslateMappingStrategy, который сопоставляет идентификатор столбца со свойством bean-компонента. 
  • CSV Reader и стратегия для передачи в CsvToBean для чтения данных в bean-компонент. Когда мы анализируем, мы получаем список бобов в результате.

Вывод

Name : Blogger0; Age : 200; Salary : 20.0002; Addresss : 0 World Wide Web
Name : Blogger1; Age : 201; Salary : 20.0002; Addresss : 1 World Wide Web
Name : Blogger2; Age : 202; Salary : 20.0002; Addresss : 2 World Wide Web

Смотрите больше в  моем блоге 

Счастливого обучения !!!!