Java中CSV文件读改写异常:控制台输出正常但无法写入文件
问题分析与解决方案
你的代码能通过System.out.println输出预期内容,但无法写入CSV文件,核心问题和修复方案如下:
最致命的问题:空catch块吞掉所有异常
代码里的catch (Exception e) { }会隐藏所有运行时错误(比如文件权限不足、路径不存在、字符串截取越界等),导致你完全不知道写入失败的根源。必须把它改成打印异常信息:
catch (Exception e) { e.printStackTrace(); // 直接输出错误栈,定位问题 }
针对性修复步骤
统一文件路径写法
读取和写入路径混用了\\和/,虽然Java兼容两种分隔符,但统一写法能避免转义失误:// 读取路径 BufferedReader br = new BufferedReader(new FileReader("G:\\java orig\\csv1\\prueba1.csv")); // 写入路径 FileWriter fichero = new FileWriter("G:\\java orig\\csv1\\111.CSV");用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(); } }添加字段合法性检查
如果原始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
相关产品推荐
相关产品推荐

