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

求助:FileWriter无法将内容写入文件且无报错

解决FileWriter无法写入文件的问题

哦,这个问题我之前帮好几个开发者排查过,咱们先拆解你代码里的核心问题:

问题根源分析

你的代码里有两个关键问题导致内容没成功写入文件:

  1. 每次循环都新建FileWriter实例:FileWriter的默认构造器是覆盖模式,每次创建新对象都会清空目标文件的原有内容。更重要的是,你没调用close()或flush()——FileWriter内部带缓冲区,不手动刷新/关闭的话,缓冲区内容不会真正写到磁盘,程序结束时可能还没完成写入操作。
  2. 逻辑漏洞:当输入stop时,代码依然会执行fw.write("\n"),不仅会多写空行,而且因为每次循环都新建FileWriter,最后这次写入也大概率没被刷入磁盘。

修正后的代码

推荐用Java 7+支持的try-with-resources语法,它会自动关闭资源,不用手动调用close(),安全又省心:

import java.util.Scanner;
import java.io.FileWriter;
import java.io.IOException;

public class FileReadLine {
    public static void main(String[] args) {
        // try-with-resources自动管理资源,无需手动close
        try (Scanner sc = new Scanner(System.in);
             FileWriter fw = new FileWriter("C:/test/abcd.txt", true)) { // 第二个参数true启用追加模式
            String str;
            do {
                System.out.println("Enter your lines");
                str = sc.nextLine();
                if (!str.equals("stop")) {
                    fw.write(str);
                    fw.write("\n"); // 仅在输入有效内容时写入换行
                }
            } while (!str.equals("stop"));
        } catch (IOException e) {
            e.printStackTrace(); // 打印异常信息,方便排查目录不存在等问题
        }
    }
}

关键修改点说明

  • 将FileWriter移到循环外并启用追加模式:new FileWriter("路径", true)的第二个参数true让写入变为追加模式,不会覆盖原有内容,而是在文件末尾添加新内容。
  • 使用try-with-resources:确保FileWriter和Scanner在代码块结束后自动关闭,强制刷新缓冲区内容到磁盘,彻底避免内容丢失。
  • 调整换行写入逻辑:只有输入内容不是stop时才写入换行,避免最后多出来的空行。

另外要确认C:/test/目录是否存在,如果不存在FileWriter会抛出IOException——之前的代码可能因为catch块没打印异常所以没发现,记得保留异常打印,方便快速定位问题~

内容的提问来源于stack exchange,提问作者coc champ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:33:59