Как парсить 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