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

Java实现循环向文本文件追加写入日志式数据的技术咨询

解决Java文件追加写入的问题

嘿,我懂你现在遇到的困扰——每次调用store方法写文件时,之前的内容都被覆盖了对吧?这是因为你当前用的PrintWriter构造方法默认是覆盖模式,每次都会重新创建文件或者清空已有内容,自然没法实现日志式的追加效果。

问题根源

你代码里的关键问题就在这一行:

PrintWriter fout = new PrintWriter(file);

这个构造方法会直接打开文件并清空原有内容,所以循环执行store时,每次都是从头开始写,之前的数据自然留不住。

解决方案:开启追加模式

只需要把PrintWriter的初始化改成追加模式就行,给你两种实用的实现方式:

方式1:用FileWriter开启追加

public void store(){ 
    File file = new File("PaperRecord.txt"); 
    try {
        // 第二个参数传true,就是告诉FileWriter要追加内容而非覆盖
        PrintWriter fout = new PrintWriter(new FileWriter(file, true)); 
        fout.println("Paper Name: " + super.getpSame()); 
        fout.println("Paper Size: " + super.getpSize()); // 补全你没写完的get方法
        fout.close(); // 一定要关闭流,不然内容可能不会立刻写入文件
    } catch (IOException e) {
        // 这里可以换成更优雅的异常处理,比如记录日志
        e.printStackTrace();
    }
}

方式2:推荐用try-with-resources(自动关闭流)

为了避免忘记关闭流导致资源泄漏,最好用Java 7+支持的try-with-resources语法,它会自动帮你关闭流:

public void store(){ 
    File file = new File("PaperRecord.txt"); 
    // 把PrintWriter放在try()里,方法结束后会自动关闭
    try (PrintWriter fout = new PrintWriter(new FileWriter(file, true))) { 
        fout.println("Paper Name: " + super.getpSame()); 
        fout.println("Paper Size: " + super.getpSize()); 
    } catch (IOException e) {
        e.printStackTrace();
    }
}

备选:用FileOutputStream实现追加

效果和上面一致,只是底层用字节流实现:

public void store(){ 
    File file = new File("PaperRecord.txt"); 
    try (PrintWriter fout = new PrintWriter(new FileOutputStream(file, true))) { 
        fout.println("Paper Name: " + super.getpSame()); 
        fout.println("Paper Size: " + super.getpSize()); 
    } catch (IOException e) {
        e.printStackTrace();
    }
}

效果说明

改成这样之后,每次调用store方法写入的内容都会追加到文件末尾,完全保留之前的内容,正好符合你想要的日志式写入效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:58:28