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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:36:31