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

Java将字符串写入resources目录文件后文件为空,该如何排查解决?

问题排查及解决方案

1. 核心直接原因

你的代码问题出在没有主动刷新缓冲区、也没有关闭IO流:
FileWriter属于带缓冲区的字符输出流,调用write()方法只是把内容写入到内存缓冲区,只有满足以下三个条件之一才会真正把内容写入磁盘:

  • 缓冲区被写满
  • 主动调用fw.flush()方法
  • 调用fw.close()关闭流
    你的代码写入后没有执行上述任何操作,内容还停留在内存中,所以目标文件为空。

2. 修正后的代码

推荐使用JDK 7及以上支持的try-with-resources语法,会自动关闭流,不需要手动写关闭逻辑:

String json = "string with json";
URL resource = getClass().getClassLoader().getResource("file.json");
// 自动关流,无需手动调用close()
try (FileWriter fw = new FileWriter(new File(resource.toURI()))) {
    fw.write(json);
} catch (Exception e) {
    e.printStackTrace();
}

3. 额外注意事项

  • 不要在生产环境往项目resources目录写入文件:该目录是用来存放静态预置资源的,项目打包成jar/war包后,resources下的文件会被打入包内,没有可写入的实际磁盘路径,强行写入会直接报错。如果需要持久化写入数据,建议指定独立的磁盘目录(比如和jar包同级的config目录、系统临时目录等)。
  • 如果是在IDE本地开发环境运行,你读取到的resource路径实际是编译后输出目录(比如Maven项目的target/classes、Gradle项目的build/classes)下的file.json,不是源码目录src/main/resources下的文件,你去源码目录查看的话自然看不到写入的内容,需要到编译输出目录查看。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:54:10