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
相关产品推荐
相关产品推荐

