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

src/main/resources存在文件仍报java.io.FileNotFoundException求助

解决Spring中ClassPathResource找不到src/main/resources下文件的问题

我来帮你排查这个java.io.FileNotFoundException: class path resource异常——明明文件放在src/main/resources目录下,Spring却找不到,大概率是这几个常见原因,对应解决办法如下:

  • 路径拼写错误(最常见)
    Spring的ClassPathResource默认从类路径根目录查找资源,而src/main/resources下的文件编译后会直接放到类路径根(比如target/classes)。要注意:

    • 不要加开头的斜杠,比如文件是config.xml,正确写法是new ClassPathResource("config.xml"),而不是new ClassPathResource("/config.xml")
    • 如果文件在子目录,比如src/main/resources/xml/data.xml,路径要写成xml/data.xml
    • 大小写敏感!比如实际文件是Data.xml,代码里写data.xml就会找不到

    示例正确代码:

    ClassPathResource xmlResource = new ClassPathResource("your-target-file.xml");
    
  • 编译后文件未被复制到类路径
    Maven/Gradle默认会把src/main/resources下的资源复制到target/classes(类路径目录),但如果你的XML文件被构建配置排除了,或者文件名拼写错误,就不会被复制。你可以直接去项目的target/classes目录下检查:

    • 如果找不到你的XML文件,检查Maven的pom.xml里有没有<resources>配置把它排除了
    • 核对文件名和代码里的路径是否完全一致(包括大小写)
  • 类加载器环境问题
    在多模块项目或者特殊类加载场景下,默认的类加载器可能找不到资源。这时可以指定当前类的类加载器来加载:

    // 把YourCurrentClass换成你当前写这段代码的类名
    ClassPathResource resource = new ClassPathResource("your-file.xml", YourCurrentClass.class.getClassLoader());
    
  • 针对XsltPayloadTransformer的特殊检查
    你代码里用到了XsltPayloadTransformer,初始化这个转换器时,要确保传入的ClassPathResource路径正确。比如:

    XsltPayloadTransformer transformer = new XsltPayloadTransformer(new ClassPathResource("your-xslt-file.xsl"));
    

    同样要确认这个XSLT文件在编译后的类路径中存在。

先按这个顺序排查,一般就能解决问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:16:28