第一项为“ID”的 CSV 文件在 Excel 中已损坏

新手上路,请多包涵

我正在尝试使用 java 将数据写入 csv 文件,但是当我尝试使用 excel 打开生成的文件时,我收到一条错误消息,指出文件已损坏。在记事本中打开文件后,它看起来格式正确,所以我不确定是什么问题。我正在使用 FileWriter 类将数据输出到文件。

 FileWriter writer = new FileWriter("test.csv");

writer.append("ID");
writer.append(',');
writer.append("name");
writer.append(',');
...
writer.append('\n');

writer.flush();
writer.close();

我是否需要在 java 中使用一些库才能打印到 csv 文件?我认为只要您使用正确的格式,您就可以在 Java 中本地执行此操作。

感谢帮助,

邵氏

原文由 Shaw 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 934
2 个回答

基本上是因为 MS Excel 无法决定如何打开包含此类内容的文件。

当您将 ID 作为电子表格类型文件中的第一个字符时,它符合 SYLK 文件的规范,并且 MS Excel(以及可能的其他电子表格应用程序)尝试将其作为 SYLK 文件打开。但与此同时,它不符合 SYLK 文件的完整规范,因为文件中的其余值是以逗号分隔的。因此,显示错误。

要解决此问题, "ID" 更改为 "id" 它应该会按预期工作。

在此处输入图像描述

这很奇怪。但是,是的!

还尝试通过减少使用文件对象来最小化文件访问。

我测试过,下面的代码完美无缺。

 import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;

public class CsvWriter {
  public static void main(String[] args) {

    try (PrintWriter writer = new PrintWriter("test.csv")) {

      StringBuilder sb = new StringBuilder();
      sb.append("id");
      sb.append(',');
      sb.append("Name");
      sb.append('\n');

      sb.append("1");
      sb.append(',');
      sb.append("Prashant Ghimire");
      sb.append('\n');

      writer.write(sb.toString());

      System.out.println("done!");

    } catch (FileNotFoundException e) {
      System.out.println(e.getMessage());
    }

  }
}

原文由 Prashant G 发布,翻译遵循 CC BY-SA 4.0 许可协议

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;

public class CsvFile {

    public static void main(String[]args){
        PrintWriter pw = null;
        try {
            pw = new PrintWriter(new File("NewData.csv"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        StringBuilder builder = new StringBuilder();
        String columnNamesList = "Id,Name";
        // No need give the headers Like: id, Name on builder.append
        builder.append(columnNamesList +"\n");
        builder.append("1"+",");
        builder.append("Chola");
        builder.append('\n');
        pw.write(builder.toString());
        pw.close();
        System.out.println("done!");
    }
}

原文由 Tamil veera Cholan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题