如何追加文本到文件并同步打印内容?Java写入文件无内容排查
问题排查与解决方案
先帮你梳理下代码里的几个关键问题,这也是你折腾一小时没搞定的核心原因:
1. FileWriter默认是覆盖模式,而非追加
你当前用的new FileWriter(txt)会直接替换原文件内容,如果要追加文本到文件末尾,必须传入第二个参数true,也就是new FileWriter(txt, true),这样新内容才会加到原有内容后面,而不是把文件清空重写。
2. 写入后未刷新/关闭缓冲区,数据没落地到磁盘
BufferedWriter是带内存缓冲区的,你调用edit.write(s)后,内容还停留在内存里,并没有真正写到硬盘上。这时候用Scanner去读,自然读不到刚写的内容。必须调用edit.flush()强制把缓冲区内容刷到磁盘,或者直接关闭流(关闭流时会自动触发flush)。
3. 读写流同时打开,存在资源冲突
你在打开BufferedWriter写文件的同时,又用Scanner去读同一个文件,这会导致文件被写锁占用,读取操作要么失败,要么读到不完整的内容。正确的做法是先写完并关闭写流,再打开读流读取。
4. 语法错误与异常处理缺失
代码里sc.nextLine...明显是语法错误,少了闭合括号;而且整个try块没有对应的catch或finally,编译都通不过。另外,IO资源(FileWriter、BufferedWriter、Scanner)最好用try-with-resources自动关闭,避免资源泄漏。
修复后的完整代码
下面是实现追加文本到文件+控制台打印文件内容的正确代码:
import java.io.*; import java.util.Scanner; public class FileAppender { public static void main(String[] args) { String contentToAppend = "more text"; File txtFile = new File("myTextFile.txt"); // 第一步:追加文本到文件 try (BufferedWriter writer = new BufferedWriter(new FileWriter(txtFile, true))) { writer.write(contentToAppend); writer.newLine(); // 可选:添加换行符,让新内容单独成行 // try-with-resources会自动关闭流,无需手动flush/close } catch (IOException e) { System.err.println("写入文件出错:" + e.getMessage()); e.printStackTrace(); } // 第二步:读取文件内容并打印到控制台 try (Scanner scanner = new Scanner(txtFile)) { System.out.println("文件当前内容:"); while (scanner.hasNextLine()) { String line = scanner.nextLine(); System.out.println(line); } } catch (FileNotFoundException e) { System.err.println("文件未找到:" + e.getMessage()); e.printStackTrace(); } } }
代码关键说明
- try-with-resources:自动管理IO资源,不用手动写
close(),彻底避免资源泄漏 - 追加模式开启:
new FileWriter(txtFile, true)确保内容追加而非覆盖 - 分阶段读写:先完成写入并释放文件锁,再读取内容,避免资源冲突
- 异常捕获:明确捕获IO异常,方便快速定位问题
内容的提问来源于stack exchange,提问作者ddalcanto
相关产品推荐
相关产品推荐

