12

我的项目结构看起来像

project/
       src/main/
               java/ ...
               resources/
                         definitions.txt
               test/
                    CurrentTest.java
               resources/ ...

在我的测试中,我需要打开definitions.txt

我愿意

 @Test
 public void testReadDesiredDefinitions() throws PersistenceException, IOException {
        final Properties definitions = new Properties();
        definitions.load(new ResourceService("/").getStream("desiredDefinitions"));
        System.out.println(definitions);
 }

当我运行这个时,我得到

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)

我怎样才能阅读这个文本文件?

谢谢

4

4 回答 4

14

单元测试的“当前目录”通常是项目目录,所以使用这个:

File file = new File("src/main/resources/definitions.txt");

并从文件中加载属性:

definitions.load(new FileInputStream(file));

如果这不起作用,或者您想检查当前目录是什么,只需打印出路径,当前目录是什么就很明显了:

System.out.println(file.getAbsolutePath());
于 2012-10-25T17:35:44.780 回答
1

您可以使用Class#getResourceAsStream轻松创建到资源文件的流。

definitions.load(getClass().getResourceAsStream("/main/java/resources/definitions.txt"));

location 参数应该是相对于您的项目库的相对文件路径(我的猜测是主要的)。

于 2012-10-25T17:37:47.353 回答
0

如果您的resources目录是源文件夹,则可以/resources/definitions.txt用作正确的路径。

我不知道,ResourceService但这应该有效:

final Properties definitions = new Properties();
definitions.load(getClass().getResourceAsStream("/resources/definitions.txt"))
于 2012-10-25T17:36:38.463 回答
0

文件 file = new File("../src/main/resources/definitions.txt");

于 2012-10-25T17:39:41.743 回答