我的项目有以下结构:
/src/main/java/
/src/main/resources/
/src/test/java/
/src/test/resources/
Run Code Online (Sandbox Code Playgroud)
我有一个文件,/src/test/resources/test.csv我想从单元测试加载文件/src/test/java/MyTest.java
我有这个代码不起作用.它抱怨"没有这样的文件或目录".
BufferedReader br = new BufferedReader (new FileReader(test.csv))
Run Code Online (Sandbox Code Playgroud)
我也尝试过这个
InputStream is = (InputStream) MyTest.class.getResourcesAsStream(test.csv))
Run Code Online (Sandbox Code Playgroud)
这也行不通.它回来了null.我正在使用Maven来构建我的项目.
从IDEA 2018.2.1开始,IDE从模块化的依赖项开始错误突出显示"不在模块图"中的包.我module-info.java在项目中添加了一个文件并添加了必需的requires语句,但我现在无法访问src/main/resources目录中的资源文件.
(有关完整示例,请参阅此GitHub项目.)
当我使用./gradlew run或./gradlew installDist+生成的包装器脚本时,我能够读取资源文件,但是当我从IDE运行我的应用程序时,我不是.
我向
JetBrains 提出了一个问题,我学到的是IDEA正在使用模块路径,而Gradle默认使用类路径.通过向我添加以下块build.gradle,我能够让Gradle 也 ...无法读取任何资源文件.
run {
inputs.property("moduleName", moduleName)
doFirst {
jvmArgs = [
'--module-path', classpath.asPath,
'--module', "$moduleName/$mainClassName"
]
classpath = files()
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试export将我感兴趣的资源目录作为"包",并在编译时遇到构建失败:
错误:包是空的或不存在:mydir
使用opens而不是exports获得相同的错误,但降级为警告.
我甚至尝试移动mydir资源目录src/main/java,但是这产生了相同的错误/警告,并且还导致资源没有被复制到build目录中.
应该在Java 9中使用哪些资源,以及如何访问它们?
注意:在继续研究问题之后,我已经相当大地编辑了这个问题.在最初的问题中,我还试图弄清楚如何在资源目录中列出文件,但在调查过程中我确定这是一个红色的鲱鱼 - 首先,因为阅读资源目录只有在资源是从file:///URL 读取(也许甚至不是),第二,因为普通文件也没有工作,所以很明显问题是资源文件一般而不是专门用于目录.
解:
按照Slaw的回答,我将以下内容添加到build.gradle:
// at compile …Run Code Online (Sandbox Code Playgroud)