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

为何Spring Boot中使用类路径加载器及‘classpath:’前缀加载文件失败?

Spring Boot类路径加载resources文件失败(IntelliJ运行)
  • 检查文件路径正确性
    类路径加载时,路径别以/开头。比如文件放在resources/config/test.txt,加载路径就写config/test.txt;另外注意大小写,Windows下IntelliJ不区分,但Linux环境会严格校验,别因为大小写匹配不上导致加载失败。
    推荐用Spring自带的ClassPathResource工具类,比手动调用类加载器更靠谱:

    ClassPathResource resource = new ClassPathResource("config/test.txt");
    // 本地运行时可以用getFile(),但打包成jar后必须改用getInputStream()
    File file = resource.getFile();
    
  • 确认IntelliJ的资源文件夹配置
    打开Project Structure(快捷键Ctrl+Alt+Shift+S),进入Modules选中你的项目模块,切换到Paths标签,确保resources文件夹被标记为Resources Root;另外去Build, Execution, Deployment->Compiler->Resource Patterns里看看,你的文件后缀(比如.txt、.json)是否在默认的资源匹配列表里,自定义后缀要手动加进去。

  • 清理缓存并重新构建
    有时候IntelliJ的缓存会搞事情,导致资源文件没被正确复制到target目录。先执行Build->Clean Project,再选Build->Rebuild Project,也可以手动删掉target文件夹后重新构建。

  • 打包jar后的读取注意事项
    如果后续要打包成jar运行,资源文件是在jar包内部的,这时候不能用getFile()获取文件对象,必须用输入流读取:

    try (InputStream is = new ClassPathResource("test.txt").getInputStream()) {
        // 在这里处理输入流内容
    } catch (IOException e) {
        e.printStackTrace();
    }
    
  • 排查Maven/Gradle的资源过滤配置
    要是用Maven,打开pom.xml检查build下的resources节点:

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>false</filtering> <!-- 设为true时要确保不会过滤掉你的文件 -->
                <includes>
                    <include>**/*</include> <!-- 确保包含所有资源文件 -->
                </includes>
            </resource>
        </resources>
    </build>
    

    Gradle项目则检查build.gradle里的sourceSets配置,保证resources目录被正确识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:45:31