Java 具有maven结构的getResourceAsStrem

Java 具有maven结构的getResourceAsStrem,java,maven,properties,intellij-idea,Java,Maven,Properties,Intellij Idea,我有以下maven项目结构: src --main ----java ------de --------mxcd --------foodster ----------Test.java ----------hans.txt 使用这段代码,我得到一个NullPointerException public class Test { public static void main(String[] args) { InputStream ins = Test.cla

我有以下maven项目结构:

src
--main
----java
------de
--------mxcd
--------foodster
----------Test.java
----------hans.txt
使用这段代码,我得到一个NullPointerException

public class Test
{
    public static void main(String[] args)
    {
        InputStream ins = Test.class.getResourceAsStream("hans.txt");
        Properties p = new Properties();

        try
        {
            p.load(ins);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }

        System.out.println(p.getProperty("100"));
    }
}
当我将项目结构更改为

src
--de
----mxcd
------foodster
--------Test.java
--------hans.txt

为什么会这样?据我所知,getResourceAsStream()查找与类位置相关的文件,因此无论我使用/src/de/mxcd。。。或者src/main/java/de/mxcd…

文件应该在
src/main/resources
中,而不是
src/main/java
中。只有
src/main/java
中的
.java
文件将在目标类路径中结束(编译),而
src/main/resources
中的文件将按原样复制。

事实上,Joe的回答是正确的。重要的是,在src/main/resources文件夹中,需要与src/main/java文件夹相同的文件夹结构

这意味着,如果要使用getResource访问文件,并且调用该文件的类位于/src/main/java/de/mxcd/util/下,则文件必须位于/src/main/resources/de/mxcd/util/下

使用intelliJ时,关键是要自行创建此结构的每个文件夹,而不是在ResourceRes下输入de.mxcd.util作为新文件夹名(如果要创建新包,该怎么办)