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

Java 8中BufferedWriter无法写入文件问题求助

嘿,作为编程新手遇到这种问题很正常,别担心!你的代码编译没问题但写不进文件,核心原因是你没有正确关闭或刷新BufferedWriter——它自带缓冲区,写操作的内容会先存在缓冲区里,没有触发刷新/关闭的话,内容就不会真正写到磁盘上。

问题原因分析

BufferedWriter的设计是为了提高IO效率,它会把要写入的内容暂时存在内存缓冲区中,只有当缓冲区满了、调用flush()方法,或者关闭流的时候,才会把缓冲区里的内容一次性写入文件。你的代码只调用了writer.write(str),之后没有做任何收尾操作,程序结束后缓冲区的内容没被写入,所以文件是空的。

另外还要注意你写的文件路径里有空格:"C:\\IntelliJfiles\\write-to- file\\src\\pl\\sca\\file.txt",虽然Java一般能处理带空格的路径,但如果路径本身不存在(比如某个文件夹没创建),也会导致写失败,不过你说编译没问题,大概率还是流没关闭的问题。

解决方法(两种常用方式)

方式1:使用Java 8支持的try-with-resources语法(推荐)

这个语法会自动帮你关闭资源,不用手动写close(),非常安全,还能避免忘记关闭的问题:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class Main {
    private static final String FILENAME = "C:\\IntelliJfiles\\write-to- file\\src\\pl\\sca\\file.txt";

    public static void main(String[] args) {
        String str = "kal";
        // try-with-resources会自动关闭BufferedWriter
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(FILENAME))) {
            writer.write(str);
            // 这里也可以手动加writer.flush(); 不过关闭的时候会自动flush,所以不是必须
        } catch (IOException e) {
            // 新手可以先打印异常信息,方便排查问题
            e.printStackTrace();
        }
    }
}

方式2:手动调用flush()和close()(传统写法)

如果你不想用try-with-resources,一定要记得在写完后刷新并关闭流,还要把关闭操作放在finally块里,保证即使出现异常也能关闭资源:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class Main {
    private static final String FILENAME = "C:\\IntelliJfiles\\write-to- file\\src\\pl\\sca\\file.txt";

    public static void main(String[] args) {
        BufferedWriter writer = null;
        try {
            String str = "kal";
            writer = new BufferedWriter(new FileWriter(FILENAME));
            writer.write(str);
            writer.flush(); // 手动刷新缓冲区,把内容写入文件
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (writer != null) {
                    writer.close(); // 关闭流,也会自动flush
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
额外提示
  • 记得检查文件路径是否正确,确保C:\\IntelliJfiles\\write-to- file\\src\\pl\\sca\\这个文件夹是存在的,如果不存在,FileWriter会抛出异常,你可以通过打印异常信息来排查。
  • 如果你想追加内容到文件而不是覆盖,可以用new FileWriter(FILENAME, true),第二个参数传true就表示追加模式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:03:21