Как парсить csv файлы java

Аватар пользователя Сергей Якимович
Сергей Якимович
15 декабря 2022

Парсить csv файл можно с помощью CsvMapper из библиотеки jackson.

Необходимо подключить библиотеку в файле build.gradle :

dependencies {
    implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-csv:2.13.0'
}

Пример исходного файла test.csv :

Катал. номер;Наименование;Кол-во;Сумма, Рубли
6RF 833 055 C;ДВЕРЬ З Л;1;42500.00
6RF 833 056 C;ДВЕРЬ З ПР;1;42500.00
6RU 845 025;СТЕКЛО З Л;1;2540.00
6RU 845 026;СТЕКЛО З ПР;1;2540.00

Создадим класс, описывающий поля нашего файла :

@JsonPropertyOrder({ "number", "name", "count", "sum" })
class Element {
    public String number;
    public String name;
    public Double count;
    public Double sum;

    @Override
    public String toString() {
        return "Element{" + "number=" + number + ", name="
                + name + ", count=" + count + ", sum=" + sum + '}';
    }
}

Считаем содержимое файла в список объектов нашего класса :

import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.databind.MappingIterator;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.List;

public class App {
    public static void main(String[] args) throws IOException {
        String fileName = "test.csv";
        Reader myReader = new FileReader(fileName);
        CsvMapper mapper = new CsvMapper();
        CsvSchema schema = mapper.schemaFor(Element.class)
                .withColumnSeparator(';').withSkipFirstDataRow(true);
        MappingIterator<Element> iterator = mapper
                .readerFor(Element.class)
                .with(schema)
                .readValues(myReader);

        List<Element> elements = iterator.readAll();

        for (Element element : elements) {
            System.out.println(element.toString());
        }
    }
}

Результат :

Element{number=6RF 833 055 C, name=ДВЕРЬ З Л, count=1.0, sum=42500.0} Element{number=6RF 833 056 C, name=ДВЕРЬ З ПР, count=1.0, sum=42500.0} Element{number=6RU 845 025, name=СТЕКЛО З Л, count=1.0, sum=2540.0} Element{number=6RU 845 026, name=СТЕКЛО З ПР, count=1.0, sum=2540.0}

1 0
Основы Java за 14 дней
  • 62 урока в онлайн-тренажере
  • 4 живых вебинара и масскодинг
  • Помощь наставника на весь период обучения

Есть что добавить? Зарегистрируйтесь

или войдите в аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Курсы по программированию в Хекслете

Backend-разработка

Разработка серверной части сайтов и веб-приложений

Frontend-разработка

Разработка внешнего интерфейса сайтов и веб-приложений и верстка

Создание сайтов

Разработка сайтов и веб-приложений на JS, Python, Java, PHP и Ruby on Rails

Тестирование

Ручное тестирование и автоматизированное тестирование на JS, Python, Java и PHP

Аналитика данных

Сбор, анализ и интерпретация данных на Python

Интенсивные курсы

Интенсивное обучение для продолжающих

DevOps

Автоматизация настройки локального окружения и серверов, развертывания и деплоя

Веб-разработка

Разработка, верстка и деплой сайтов и веб-приложений, трудоустройство для разработчиков

Математика для программистов

Обучение разделам математики, которые будут полезны при изучении программирования

JavaScript

Разработка сайтов и веб-приложений и автоматизированное тестирование на JS

Python

Веб-разработка, автоматическое тестирование и аналитика данных на Python

Java

Веб-разработка и автоматическое тестирование на Java

PHP

Веб-разработка и автоматическое тестирование на PHP

Ruby

Разработка сайтов и веб-приложений на Ruby on Rails

Go

Курсы по веб-разработке на языке Go

HTML

Современная верстка с помощью HTML и CSS

SQL

Проектирование базы данных, выполнение SQL-запросов и изучение реляционных СУБД

Git

Система управления версиями Git, регулярные выражения и основы командой строки

Похожие вопросы

1
ответ
21 декабря 2021
1
ответ