Java:如何在测试中打开src/main/resources中的文本文件?
我的项目结构看起来像Java:如何在测试中打开src/main/resources中的文本文件?,java,Java,我的项目结构看起来像 project/ src/main/ java/ ... resources/ definitions.txt test/ CurrentTest.java resources/ ... 在我的测试中,我需要打开definitions.txt 我知道
project/
src/main/
java/ ...
resources/
definitions.txt
test/
CurrentTest.java
resources/ ...
在我的测试中,我需要打开definitions.txt
我知道
当我运行这个时,我会
java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:418)
at java.util.Properties.load0(Properties.java:337)
at java.util.Properties.load(Properties.java:325)
如何读取此文本文件
感谢单元测试的“当前目录”通常是项目目录,因此请使用此目录:
File file = new File("src/main/resources/definitions.txt");
并从文件中加载属性:
definitions.load(new FileInputStream(file));
如果这不起作用,或者您想检查当前目录是什么,只需打印出路径,就可以清楚地看到当前目录是什么:
System.out.println(file.getAbsolutePath());
如果
resources
目录是源文件夹,则可以使用/resources/definitions.txt
作为正确路径
我不知道资源服务
,但这应该可以:
final Properties definitions = new Properties();
definitions.load(getClass().getResourceAsStream("/resources/definitions.txt"))
您可以利用轻松地创建到资源文件的流
definitions.load(getClass().getResourceAsStream("/main/java/resources/definitions.txt"));
location参数应该是相对于项目库的相对文件路径(我猜是main)。file file=new file(“../src/main/resources/definitions.txt”) 出于好奇,什么是
ResourceService
?注意:如果definitions.txt要打包到JAR发行版中,这是行不通的。@Vulcan可以肯定,但我的项目结构在我看来非常清楚,这是源代码。我不否认这一点,但并非所有最终用户都拥有完整的源代码及其结构,例如在JAR发行版的情况下。@Vulcan您提出了一个有趣的观点,我不想故意为自己辩护,但根据定义,单元测试(这就是)有可用的源代码。也就是说,这段代码只会作为原始源代码运行,而不会在jar中运行。有趣的是,我并没有注意到这是一个单元测试。我假设被测试的单元通常会以一种或另一种形式分布在另一个项目中?遵循项目结构,例如,如果在名为classes
的文件夹中生成,则在生成过程中将resources
文件夹复制到该文件夹中,然后它就可以工作了。
definitions.load(getClass().getResourceAsStream("/main/java/resources/definitions.txt"));