带逗号的 OpenCSV 字段

OpenCSV fields with commas

我正在创建一个 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 上没有看到任何相关文档。

除了 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);
}