【问题标题】:Writing list<String> in csv java using CsvPrinter使用 CsvPrinter 在 csv java 中编写 list<String>
【发布时间】:2021-09-02 12:32:26
【问题描述】:

我有 List&lt;String&gt; 正在写入 csv 文件,但每一行都写在一个单元格上。如何通过 "," 拆分它们?我尝试设置分隔符,但仍然无法正常工作。
代码

Writer writer = new FileWriter("D://new.csv", true);
            CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT);
            csvPrinter.printRecords(myList);

【问题讨论】:

  • 你能分享你myList的样本数据吗?
  • 分享一下您是如何构建 myList 的?可能有更好的解决方案

标签: java list csv delimiter apache-commons


【解决方案1】:

正如documentation 所述,当您提供List&lt;String&gt; 时,它将使用一条记录,即一行,即一个单元格中的每个String

如果给定的集合只包含简单的对象,此方法将打印一条记录,如 printRecord(Iterable)


您需要一个代码来使用每个 String 实际上是一行这一事实,例如

  • 传递每个String 拆分一个单独的记录

    List<String> myList = new ArrayList<>();
    for (String row : myList)
        csvPrinter.printRecord(row.split(","));
    
  • 拆分所有String,然后将整个列表作为记录列表传递

    List<String> myList = new ArrayList<>();
    List<String[]> myListSplitted = myList.stream().map(row -> row.split(",")).collect(Collectors.toList());
    csvPrinter.printRecords(myListSplitted);
    

【讨论】:

  • 每个字符串最好不要有逗号。
  • @WJS 他谈到了逗号,这就是我使用它们的原因
  • 没错,但有时,OP 并没有意识到拆分并不那么聪明。
  • 这有效,但我收到了警告。方法 printRecord(Object...) 的最后一个参数的类型 String[] 与可变参数类型不完全匹配。强制转换为 Object[] 以确认非可变参数调用,或为可变参数调用传递 Object 类型的单个参数。
猜你喜欢
  • 2018-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 2021-09-17
  • 2012-05-05
相关资源
最近更新 更多