Java如何向文本文件写入多行内容?新手求助修正代码问题
解决Java多行写入文件的问题
嘿,别着急,我来帮你排查这段代码的问题~ 你遇到的核心问题是流的关闭时机错误,再加上异常处理不够详细,导致你没看到具体的报错原因。
你的代码里的主要问题:
info.close()放在了for循环内部:第一次循环执行到这句时,就关闭了BufferedWriter流,后面的循环再调用write()或newLine()就会触发IO异常,但你的catch块只打印了一句模糊的提示,所以你没察觉到具体问题。- 异常处理太笼统:只输出"A write error has occurred",无法得知具体是哪里出错、为什么出错,不利于排查问题。
修正后的代码(基础版)
我们把close()移到循环外面,确保所有写入操作完成后再关闭流,同时完善异常信息的打印:
import java.io.FileWriter; import java.io.BufferedWriter; public class WritingToAFile { public static void main(String[] args) { BufferedWriter info = null; try { FileWriter fstream = new FileWriter("P:/Computer Science/greeting.txt"); info = new BufferedWriter(fstream); for (int i = 1; i < 6; i++) { info.write("Hello"); info.newLine(); info.write("Bonjour"); info.newLine(); info.write("Guten tag"); info.newLine(); info.write("Aloha"); info.newLine(); info.write("Nihao"); info.newLine(); // 可选:在每轮循环后加一个换行,分隔不同轮次的内容 } } catch (Exception e) { // 打印具体的错误信息和异常栈,方便排查 System.out.println("写入出错:" + e.getMessage()); e.printStackTrace(); } finally { // 安全关闭流,避免资源泄漏 try { if (info != null) { info.close(); } } catch (Exception ex) { ex.printStackTrace(); } } } }
更推荐的写法:try-with-resources(Java 7+)
Java 7及以上支持try-with-resources语法,它会自动帮你关闭实现了AutoCloseable接口的资源(比如BufferedWriter、FileWriter),不用手动写close(),代码更简洁安全,还能避免因异常导致的资源泄漏:
import java.io.BufferedWriter; import java.io.FileWriter; public class WritingToAFile { public static void main(String[] args) { // 括号内的资源会在try代码块结束后自动关闭 try (FileWriter fstream = new FileWriter("P:/Computer Science/greeting.txt"); BufferedWriter info = new BufferedWriter(fstream)) { for (int i = 1; i < 6; i++) { info.write("Hello"); info.newLine(); info.write("Bonjour"); info.newLine(); info.write("Guten tag"); info.newLine(); info.write("Aloha"); info.newLine(); info.write("Nihao"); info.newLine(); } // 无需手动调用close(),资源会自动释放 } catch (Exception e) { System.out.println("写入出错:" + e.getMessage()); e.printStackTrace(); } } }
额外小提示:
如果想要追加内容到现有文件而不是覆盖它,可以使用FileWriter的重载构造方法,第二个参数传true:
new FileWriter("P:/Computer Science/greeting.txt", true)
内容的提问来源于stack exchange,提问作者Hafsah H
相关产品推荐
相关产品推荐

