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

Java创建CSV文件抛出FileNotFoundException异常如何解决

问题根源

报错是因为生成的文件名包含操作系统禁止用作文件名的特殊字符:你定义的日期格式MM/dd/yyyy-HH:mm:ssZ中的/会被Windows、Unix类系统识别为路径分隔符,系统会尝试寻找08目录下的23子目录来存放文件,对应目录不存在就会抛出FileNotFoundException。此外Windows系统也不允许文件名中出现:,也会触发相同报错。

修复步骤
  • 修改日期格式化规则,将/、:替换为允许的字符,如短横线-、下划线_
  • 可选优化:新增父目录自动创建逻辑,避免指定存储路径时父目录不存在的问题;使用try-with-resources语法自动管理IO流,避免资源泄漏
  • 额外提示:原代码表头包含logoUrl字段,但实际写入行时漏写该字段,会导致CSV列数不匹配,建议同步修复
  • 如果后续不需要保留本地文件,可直接将CSV内容写入内存输出流后直接上传S3,完全规避本地文件操作的各类问题
修正后代码示例
// 替换日期格式中的非法文件名字符
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-dd-yyyy-HH_mm_ssZ");
String formattedString = zonedDateTime.format(formatter);
String fileName = formattedString + "partner" + ".csv";
File newFile = new File(fileName);

// 若需要指定存储路径而非当前工作目录,可替换为以下写法
// File newFile = new File("/your/custom/path/" + fileName);

// 自动创建不存在的父目录
if (newFile.getParentFile() != null) {
    newFile.getParentFile().mkdirs();
}

// try-with-resources自动关闭IO流
try (BufferedWriter writer = new BufferedWriter(new FileWriter(newFile))) {
    writer.write("id,name,logoUrl,status,ctime,mtime\n");
    for(Partner partner : partners){
        System.out.println(partner.getId() + " " + partner.getName());
        // 补全漏写的logoUrl字段
        writer.write(partner.getId()+","+partner.getName()+","+partner.getLogoUrl()+","+partner.getStatus()+","+partner.getCtime()+","+partner.getMtime()+"\n");
    }
} catch (IOException e) {
    // 按需添加异常处理逻辑
    e.printStackTrace();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:54:03