【问题标题】:Export array values to csv file java将数组值导出到 csv 文件 java
【发布时间】:2013-02-28 03:35:52
【问题描述】:

我只需要帮助将数组元素导出到 csv 文件。我不知道我的代码有什么问题。任何帮助都将不胜感激。谢谢。

for (int index = 0; index < cols.length; index++)
{
    FileWriter fw = new FileWriter(newFileName);
    if (index == cols.length - 1)
    {
        fw.append(cols[index]);
    }
    else
    {
        fw.append(cols[index]);
        fw.append(",");
    }

}

当我运行它时。我的 csv 文件没有任何反应。事实上,它会抹去一切。请帮忙。

【问题讨论】:

  • 您是否在代码末尾添加了fw.close();?此外,您应该在循环之外声明fw,否则您的文件将为每一列重写。
  • 你的数组中存储了什么?

标签: java arrays csv


【解决方案1】:

最好的方法是使用 CSVWriter。如果您有一个 Maven 项目,请将其添加为依赖项:

  <dependency>
      <groupId>com.opencsv</groupId>
      <artifactId>opencsv</artifactId>
      <version>4.4</version>
  </dependency>

然后你可以像这样使用它:

try {
        //the list that contains the String arrays
        List<String[]> whatever = new ArrayList<>();
        CSVWriter writer = new CSVWriter(new FileWriter(csvFilename));
        String[] header = "Name,Age,Height,etc..".split(",");
        writer.writeNext(header);
        writer.writeAll(whatever, true); //And the second argument is boolean which represents whether you want to write header columns (table column names) to file or not.
        writer.close();
        System.out.println("CSV file created succesfully.");
    } catch (Exception e) {
        System.out.println("exception :" + e.getMessage());
    }

【讨论】:

    【解决方案2】:

    假设您将 String 存储在数组中,我发布了一个替代解决方案:

    BufferedWriter br = new BufferedWriter(new FileWriter("myfile.csv"));
    StringBuilder sb = new StringBuilder();
    
    // Append strings from array
    for (String element : array) {
     sb.append(element);
     sb.append(",");
    }
    
    br.write(sb.toString());
    br.close();
    

    最好的问候。

    【讨论】:

    • 所以如果你同意这个答案,请将它标记为适合你的答案,以便使这篇文章“关闭”,也许有同样问题的人可以看到这是一个可靠的答案信任。很高兴帮助你。最好的问候。
    【解决方案3】:

    如果您将更有效的 BufferedWriter 与 try-with-resources 结合使用,则 writer 会自动关闭。 (在 Java 7 中)

    try {BufferedWriter br = new BufferedWriter(new FileWriter(newFileName)) {
        // your code
    }
    

    【讨论】:

      【解决方案4】:

      你需要flush写入的数据,close你的FileWriter

            finally {
              fw.close(); // close will automatically flush the data 
            }
      

      另外,请改用 BufferedWriterPrintWriter,因为它们比 FileWriter 高效且进化。

      顺便说一句,在你的 for 循环中声明 FileWriter。目前它将覆盖每次迭代的列。

      【讨论】:

      • 需要冲洗吗?只需阅读 java 文档,这些文档表明 flush 被称为 close 的一部分:关闭流,首先刷新它。
      • @ChrisKnight 是的,刚刚意识到。 :)
      【解决方案5】:

      你必须使用

       FileWriter fw = new FileWriter(newFileName,true);
      

      追加内容,否则文件将被覆盖。

      append 方法的名称可能会产生误导,实际上它附加到内部缓冲区,而不是文件内容。

      【讨论】:

        猜你喜欢
        • 2020-02-02
        • 2016-02-24
        • 2018-04-15
        • 1970-01-01
        • 2019-03-24
        • 2016-04-30
        • 2019-02-14
        • 2016-04-12
        • 1970-01-01
        相关资源
        最近更新 更多