You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java使用FileWriter向CSV文件写入指定行并添加表头的实现咨询

代码调整实现方案

你原来的代码存在两个核心问题:

  • 默认使用覆盖模式写入文件,每次调用方法都会清空历史数据
  • 没有表头写入逻辑,也没有判断文件是否首次创建的机制

调整后的完整代码如下:

private void saveStats(int early, int infected, int recovered, int deads, int notInfected, int vaccinated, int iteration){
    // 定义文件对象
    File statFile = new File("statistic.csv");
    // 判断是否需要写入表头:文件不存在 或 文件存在但内容为空时写入表头
    boolean needWriteHeader = !statFile.exists() || statFile.length() == 0;

    // try-with-resources自动关闭流,第二个参数true代表开启追加写入模式
    try (FileWriter txt = new FileWriter(statFile, true)) {
        if (needWriteHeader) {
            // 表头和数据行统一使用分号作为分隔符
            txt.write("Iteration;Early;Infected;Recovered;Dead;NotInfected;Vaccinated\n");
        }
        // 按顺序写入字段值
        txt.write(String.valueOf(iteration));
        txt.write(";");
        txt.write(String.valueOf(early));
        txt.write(";");
        txt.write(String.valueOf(infected));
        txt.write(";");
        txt.write(String.valueOf(recovered));
        txt.write(";");
        txt.write(String.valueOf(deads));
        txt.write(";");
        txt.write(String.valueOf(notInfected));
        txt.write(";");
        txt.write(String.valueOf(vaccinated));
        txt.write("\n");
    } catch (IOException ex) {
        ex.printStackTrace();
        System.out.println("Error!");
    }
}

核心修改点说明

  • 新增文件存在性判断逻辑,仅在首次创建文件/文件为空时写入表头,避免重复写入表头
  • FileWriter构造方法新增第二个参数true,开启追加写入模式,不会覆盖原有历史数据
  • 改用try-with-resources语法自动管理流的关闭,避免手动关闭流时可能出现的资源泄漏问题
  • 补充迭代次数字段的写入逻辑,和列名规则对应
  • 表头和数据行统一使用分号作为分隔符,保证CSV文件格式一致

内容的提问来源于stack exchange,提问作者Sebastian Halik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:06:00