Java程序方法中使用FileWriter无法写入.csv文件问题求助
解决Java自定义方法中无法写入CSV文件的问题
这个问题我太熟悉啦!核心原因是FileWriter的缓冲机制——它不会立刻把内存里的内容写到文件,得手动触发刷新或者关闭流才行,而你之前的代码刚好漏掉了这关键一步!
为什么main方法里能正常工作?
因为main方法是程序的入口,当main执行完毕后JVM会自动清理相关资源,包括帮你关闭FileWriter流,这时候缓冲区里的内容就会被强制写入文件。但自定义方法执行完后,流对象还留在内存里,JVM不会立刻去关闭它,所以内容一直卡在缓冲区,没写到文件里。
两种可靠的解决办法
方法1:手动刷新+关闭流
给代码加上刷新和关闭操作,确保内容写入文件,同时释放资源:
FileWriter writer = null; try { writer = new FileWriter("fisiere/audit.csv", true); DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); LocalDateTime now = LocalDateTime.now(); writer.append(dtf.format(now)); writer.append(","); writer.append("insereazaTabelCandidatiLinie"); writer.append(","); writer.append(Thread.currentThread().getName()); writer.append("\n"); // 强制把缓冲区内容刷到文件 writer.flush(); } catch (IOException e) { // 不要忽略异常,打印错误方便排查 e.printStackTrace(); } finally { if (writer != null) { try { // 关闭流,同时也会自动刷新缓冲区 writer.close(); } catch (IOException e) { e.printStackTrace(); } } }
方法2:使用try-with-resources语法(推荐)
Java 7及以上支持的语法,会自动帮你关闭流,不用手动写close,更简洁安全:
try (FileWriter writer = new FileWriter("fisiere/audit.csv", true)) { DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); LocalDateTime now = LocalDateTime.now(); writer.append(dtf.format(now)); writer.append(","); writer.append("insereazaTabelCandidatiLinie"); writer.append(","); writer.append(Thread.currentThread().getName()); writer.append("\n"); // 无需手动flush/close,try块结束时自动处理 } catch (IOException e) { e.printStackTrace(); }
额外提醒
以后操作文件流的时候,一定要记得关闭资源!不管是用finally还是try-with-resources,这都是避免资源泄漏和数据丢失的关键哦~
内容的提问来源于stack exchange,提问作者Ana-Maria
相关产品推荐
相关产品推荐

