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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:43:29