我在名为 fixtures
的子目录中有文件 allDepartments.json
,我想从 Fixture.java
类访问它。
这是我的 Fixture.java 代码:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
public final class Fixture {
private static final String FIXTURES_PATH = "";
private final String fixture;
public Fixture(String fixtureName) throws IOException {
fixture = new String(Files.readAllBytes(Paths.get(FIXTURES_PATH + fixtureName)));
}
public final String getFixture() {
return fixture;
}
}
然而,每次他尝试访问该文件时,我都会得到一个java.nio.file.NoSuchFileException: allDepartments.json
...
我听说过 getResource()
方法并尝试了所有可能的组合,但没有成功。
我需要它来为我的 JUnit 测试存储多行字符串。
我能做什么?
最佳答案
NIO.2 API不能用于读取有效项目资源的文件,即类路径中存在的文件。
在您的情况下,您有一个 Maven 项目和一个资源,您希望在应用程序的单元测试期间阅读这些资源。首先,这意味着该资源应放在 src/test/resources
下,以便 Maven 在测试期间自动将其添加到类路径中。其次,这意味着您不能使用 Files
实用程序来读取它。
您将需要求助于使用传统的 BufferedReader
:
public Fixture(String fixtureName) throws IOException {
try (BufferedReader br = new BufferedReader(new InputStreamReader(Fixture.class.getResourceAsStream(FIXTURES_PATH + fixtureName)))) {
// do your thing with br.readLine();
}
}
请注意为 getResourceAsStream
提供的路径是相对于当前类的路径或绝对路径。如果资源位于 src/test/resources/folder/allDepartments.json
中,则有效路径为 /folder/allDepartments.json
。
关于java - 如何加载相对于类包的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34812341/