#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);
}