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

用DefaultResourceLoader加载文件遇FileNotFoundException,路径有效却报错求解决

问题分析与解决方案

错误原因

你使用DefaultResourceLoader.getResource()加载文件时,传入的是本地文件系统的绝对路径,但这个方法的默认逻辑是:当路径以/开头时,会将其视为类路径根目录下的资源路径,而非操作系统的绝对路径。因此它会去项目的类路径(比如target/classes目录或jar包内部)寻找该路径,自然找不到本地磁盘里的文件,最终抛出FileNotFoundException。

解决方法

根据你的实际需求,选择以下两种方案之一:

方案1:直接加载本地文件系统的文件

如果这个文件不需要放入类路径,仅从本地磁盘读取,可通过两种方式处理:

  • 方式一:给路径添加file:前缀
    修改调用时的路径,加上file:前缀,让ResourceLoader识别为文件系统资源:
    streamHelper("file:/Users/my/IdeaProjects/rules-management/data_tacos-sample/post-migration/sourceData/config_-e48059402bd4.json")
    
  • 方式二:直接使用FileInputStream
    跳过DefaultResourceLoader,直接通过文件系统读取:
    private InputStream streamHelper(String resourcePath) throws IOException {
        return new FileInputStream(new File(resourcePath));
    }
    

方案2:将文件放入类路径加载

如果这个文件属于项目资源,应该放在类路径下管理:

  1. 将文件移动到项目的src/main/resources(生产环境)或src/test/resources(测试环境)目录下,例如放在src/main/resources/sourceData/路径下。
  2. 调用时传入类路径相对路径,去掉绝对路径部分:
    streamHelper("sourceData/config_-e48059402bd4.json")
    
  3. 验证:确保IDE已将resources目录标记为「资源根目录」,打包后文件会被自动包含在输出的jar/war包中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:50:26