5

我只需要帮助将数组元素导出到 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 文件没有任何反应。事实上,它会抹去一切。请帮忙。

4

5 回答 5

12

假设您将 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();

最好的祝福。

于 2013-03-12T14:52:32.097 回答
4

您需要刷新写入的数据,关闭FileWriter

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

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

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

于 2013-03-12T14:45:37.153 回答
2

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

try {BufferedWriter br = new BufferedWriter(new FileWriter(newFileName)) {
    // your code
}
于 2013-03-12T14:54:49.127 回答
0

你必须使用

 FileWriter fw = new FileWriter(newFileName,true);

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

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

于 2013-03-12T14:49:36.477 回答
0

最好的方法是使用 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());
    }
于 2018-12-14T17:53:33.180 回答