PrintWriter写入空白文件问题:在线数据库Ping程序日志异常
解决PrintWriter写入文件内容为空的问题
嘿,我一眼就看出问题出在哪了——你的PrintWriter流没被正确关闭或者刷新!
当你用PrintWriter写内容时,数据会先暂存在内存缓冲区里,要是不主动触发刷新或者关闭流,缓冲区里的内容根本不会写到磁盘上。这就是为什么你看到文件修改时间更新了,但打开却是空的——文件确实被创建/修改了,但内容还留在内存里没落地。
而且我注意到你定义的printToFile方法接收了text参数,但代码里根本没用到它,这可能也是你后续要完善的点。
修复方案1:手动关闭并刷新流
给你的代码加上finally块,确保无论是否发生异常,流都会被关闭(关闭流时会自动刷新缓冲区):
public static void printToFile(String text) { String fileName = "log.txt"; PrintWriter outputStream = null; try { outputStream = new PrintWriter(fileName); System.out.println("Printing to txt"); outputStream.println("Debug"); outputStream.println(text); // 用上传入的text参数 } catch (FileNotFoundException e) { System.out.println("文件未找到:" + e.getMessage()); } finally { if (outputStream != null) { outputStream.close(); // 关闭流,自动刷新缓冲区到磁盘 } } }
修复方案2:用try-with-resources自动管理资源(推荐)
从Java 7开始,try-with-resources语法会自动帮你关闭实现了AutoCloseable接口的资源,不用手动写finally块,代码更简洁安全:
public static void printToFile(String text) { String fileName = "log.txt"; try (PrintWriter outputStream = new PrintWriter(fileName)) { System.out.println("Printing to txt"); outputStream.println("Debug"); outputStream.println(text); } catch (FileNotFoundException e) { System.out.println("文件未找到:" + e.getMessage()); } }
额外提示:如果需要追加内容而不是覆盖
要是你希望每次运行程序都把日志追加到文件末尾,而不是清空原有内容,可以用FileWriter来构造PrintWriter,开启追加模式:
try (PrintWriter outputStream = new PrintWriter(new FileWriter(fileName, true))) { // 写入内容 }
内容的提问来源于stack exchange,提问作者Lasse Fisker
相关产品推荐
相关产品推荐

