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
相关产品推荐
相关产品推荐

