Поля OpenCSV с запятыми

#java #opencsv

Вопрос:

Я создаю csv-файл, в котором поля могут содержать запятые. В java запись выполняется с помощью opencsv.

 try (Writer fileWriter = Files.newBufferedWriter(Paths.get(filePath))) {

      CSVWriter csvWriter =
          new CSVWriter(
              fileWriter,
              ICSVWriter.DEFAULT_SEPARATOR,
              ICSVWriter.NO_QUOTE_CHARACTER,
              ICSVWriter.DEFAULT_ESCAPE_CHARACTER,
              ICSVWriter.DEFAULT_LINE_END);
      csvWriter.writeNext(headers);
      csvWriter.writeAll(rows);
    } catch (IOException e) {
      throw new IOException(e);
    }

 

Так что берите поле, как ["field, 1", "field, 2", "field, 3"] я ожидал бы получить колонку, "field, 1", "field, 2", "field, 3" но я получаю field", 1,field", 2,field", 3 .

В самом деле, запятые исчезли при открытии в excel, и, как ожидается, кавычки не будут отображаться. Я не вижу никаких документов для этого на opencsv.

Комментарии:

1. У меня нет опыта работы с opencsv, но этот говорит со мной — ICSVWriter.NO_QUOTE_CHARACTER .

Ответ №1:

Все выглядит хорошо, кроме ICSVWriter.NO_QUOTE_CHARACTER . Передавая NO_QUOTE_CHARACTER в качестве параметра, вы просите OpenCSV рассматривать кавычки как обычный текст в файле, и именно это он и делает.

Если вы уверены, что двойные кавычки будут вашим символом цитаты, вы можете изменить его на ICSVWriter.DEFAULT_QUOTE_CHARACTER

Наконец, ваш фрагмент выглядит так, как показано ниже:

 try (Writer fileWriter = Files.newBufferedWriter(Paths.get(filePath))) {

  CSVWriter csvWriter =
      new CSVWriter(
          fileWriter,
          ICSVWriter.DEFAULT_SEPARATOR,
          ICSVWriter.DEFAULT_QUOTE_CHARACTER,
          ICSVWriter.DEFAULT_ESCAPE_CHARACTER,
          ICSVWriter.DEFAULT_LINE_END);
  csvWriter.writeNext(headers);
  csvWriter.writeAll(rows);
} catch (IOException e) {
  throw new IOException(e);
}