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

Java中CSV文件读改写异常:控制台输出正常但无法写入文件

问题分析与解决方案

你的代码能通过System.out.println输出预期内容,但无法写入CSV文件,核心问题和修复方案如下:

最致命的问题:空catch块吞掉所有异常

代码里的catch (Exception e) { }会隐藏所有运行时错误(比如文件权限不足、路径不存在、字符串截取越界等),导致你完全不知道写入失败的根源。必须把它改成打印异常信息:

catch (Exception e) {
    e.printStackTrace(); // 直接输出错误栈,定位问题
}

针对性修复步骤

  1. 统一文件路径写法
    读取和写入路径混用了\\和/,虽然Java兼容两种分隔符,但统一写法能避免转义失误:

    // 读取路径
    BufferedReader br = new BufferedReader(new FileReader("G:\\java orig\\csv1\\prueba1.csv"));
    // 写入路径
    FileWriter fichero = new FileWriter("G:\\java orig\\csv1\\111.CSV");
    
  2. 用try-with-resources自动管理流资源
    原代码如果在循环中抛出异常,pw.close()可能不会执行,导致内容无法写入磁盘。改用Java 7+的try-with-resources语法,自动关闭所有流:

    public static void main(String[] args) {
        String SEPARATOR = ",";
    
        try (BufferedReader br = new BufferedReader(new FileReader("G:\\java orig\\csv1\\prueba1.csv"));
             FileWriter fichero = new FileWriter("G:\\java orig\\csv1\\111.CSV");
             PrintWriter pw = new PrintWriter(fichero)) {
    
            String line = br.readLine();
            while (line != null) {
                String[] fields = line.split(SEPARATOR);
                String t1 = fields[0];
                String pin_mod = t1.substring(0,4)+" "+t1.substring(4,8)+" "+t1.substring(8,12)+" "+t1.substring(12,16);
                String t2 = fields[1];
                String t4 = fields[4];
                String a = t4.substring(0,4);
                String m = t4.substring(4,6);
                String d = t4.substring(6,8);
                String outputLine = pin_mod + ";" + t2 + ";" + d + "/" + m + "/" + a;
                System.out.println(outputLine);
                pw.println(outputLine);
                line = br.readLine();
            }
            pw.flush(); // 手动确保内容写入磁盘
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
  3. 添加字段合法性检查
    如果原始CSV行的字段长度不符合预期(比如t1不足16位、t4不足8位),会抛出StringIndexOutOfBoundsException中断写入,建议先做校验:

    if (t1.length() >= 16 && t4.length() >= 8) {
        // 执行截取和写入逻辑
    } else {
        System.err.println("无效行:字段长度不符合要求 -> " + line);
    }
    

常见写入失败排查点

  • 权限不足:检查G:\java orig\csv1文件夹是否有写入权限;
  • 文件被占用:确认111.CSV没被Excel、记事本等程序打开;
  • 路径不存在:目标文件夹不存在的话,先手动创建G:\java orig\csv1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:05:25