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

Java中如何读取test/resources目录下的资源文件(无需移动至main/resources)

核心报错原因

你当前写法报错有两个核心原因:

  1. src/test/resources目录默认仅被测试类路径包含,main代码运行时默认不会加载该目录下的资源
  2. ResourceUtils.getFile仅能读取文件系统中的实体文件,无法读取jar包内的类路径资源,即使资源在类路径中,打包成jar后运行也会抛出异常

可选解决方案

方案1:工具类仅在测试流程调用(最适配场景,你读取的是SIT测试用feature文件,通常仅在测试环节使用)

测试执行时类路径默认已包含src/test/resources,优先替换为读输入流的写法,兼容文件系统和jar包两种场景:

import org.springframework.core.io.ClassPathResource;
import java.io.InputStream;

// 读取资源流,可按需转成字符串或临时文件使用
InputStream inputStream = new ClassPathResource("features/SIT/test.feature").getInputStream();

如果必须获取File对象且仅在本地测试环境运行,可修改构建配置将指定测试资源加入main资源打包范围:

  • Maven配置(pom.xml的build节点下添加):
<resources>
    <resource>
        <directory>src/main/resources</directory>
    </resource>
    <resource>
        <directory>src/test/resources</directory>
        <includes>
            <include>features/SIT/test.feature</include>
        </includes>
    </resource>
</resources>
  • Gradle配置(build.gradle中添加):
sourceSets {
    main {
        resources {
            srcDir 'src/test/resources'
            include 'features/SIT/test.feature'
        }
    }
}

方案2:生产环境需调用工具类读取该文件

如果生产运行时也要使用该文件,可使用绝对路径读取,不依赖类路径:

import java.io.File;

// 建议将路径写入配置文件,避免硬编码适配不同环境
File file = new File("/自定义的文件存放绝对路径/features/SIT/test.feature");

注意:该方式需要提前将测试资源文件放到对应路径下,跨环境部署时需要同步调整路径配置

方案3:本地开发场景用相对路径读取

仅适合本地开发调试使用,无需修改构建配置:

import java.io.File;

// 运行时工作目录需设置为项目根路径
File file = new File("test/resources/features/SIT/test.feature");

注意:IDEA运行时可在运行配置的Working directory项设置为项目根路径保证相对路径生效


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 03:45:03