Как написать List <String []> в csv-файле с помощью simpleflatmapper?

Я должен использовать библиотеку simpleflatmapper, и я не могу найти способ просто написать в csv-файле a List<String[]>с помощью этой библиотеки . Я могу разобрать (без бланка) и акции в List<String[]>:

FileReader file = new FileReader("file.csv");
Iterator<String[]> parser = CsvParser.separator(',').quote('"').iterator(file);
List<String[]> lines = new ArrayList<String[]>();
String[] line;
while(parser.hasNext()) {
    line = parser.next();
    if (line[0].length() != 0) {
        lines.add(line);
    }
}
FileWriter fw = new FileWriter("copy_file.csv");
........

Но я не нашел способа написать новый файл csv с данными List<String[]> lines. Я уверен, что это возможно, но документации недостаточно . Короче, мне нужна помощь!

java,csv,simpleflatmapper,

1

Ответов: 2


1 принят

На первой странице официальной документации:

CsvWriter.CsvWriterDSL<String[]> dsl = CsvWriter.from(String[].class)
                                                .columns("a[0]", "a[1]", "a[2]")
                                                .skipHeaders();

try (FileWriter fileWriter = new FileWriter(file)) {
    CsvWriter<String[]> writer = dsl.to(fileWriter);
    lines.forEach(CheckedConsumer.toConsumer(writer::append));
}

Я предположил, что у каждого String[]есть как минимум три элемента - columns("a[0]", "a[1]", "a[2]"). В противном случае ArrayIndexOutOfBoundsExceptionпроизойдет.


1

После обсуждения с автором библиотеки , кажется, что идеальным кодом для этого случая является использование CsvCellWriter(когда мы не знаем заранее количество столбцов для записи, на самом деле, если у нас нет заголовка), а не CsvWriterпотому, что CsvWriterнеобходимо заранее знать структуру файла csv для записи; линии - этоList<String[]>

Зависимость Maven:

<groupId>org.simpleflatmapper</groupId>
<artifactId>sfm-csv</artifactId>
<version>3.18.3</version>

import org.simpleflatmapper.csv.*;
import org.simpleflatmapper.csv.impl.writer.CsvCellWriter;
..........
FileWriter writer = new FileWriter("new_file.csv");
CsvCellWriter cellWriter = CsvCellWriter.DEFAULT_WRITER.separator(',').quote('"');
lines.forEach ( strs ->  {
try {
    if (strs.length > 0) {
        cellWriter.writeValue(strs[0], writer);
        for (int i = 1; i < strs.length; i++) {
           cellWriter.nextCell(writer);
           cellWriter.writeValue(strs[i], writer);
        }
       }
    cellWriter.endOfRow(writer);
} catch (IOException e) {e.printStackTrace();}
} );
writer.close();

Этот код позволяет одинаково записывать данные списка, потому что мы можем выбрать разделитель, цитату и, в конечном итоге, другие параметры. Кроме того, эта библиотека кажется удобной и быстрой, чтобы разбирать файлы csv.

Java, CSV, simpleflatmapper,
Похожие вопросы
Яндекс.Метрика