在IntelliJ for Maven项目中添加资源

我有这样的项目结构:

src |-main |-java |-com.abc.xyz |-Login.java 

我必须向此添加资源文件并使用以下方式读取资源

 nputStream is = getClass().getResourceAsStream("launchers.properties"); 

这是空的。

在intellij中,我无法在src / main下为resources文件夹添加新包,以便项目结构如下所示。 我怎样才能将launchers.properties资源文件导入到项目中?

 src |-main |-java |-com.abc.xyz |-Login.java |-resources |-com.abc.xyz |-Login |-launcher.properties 

我尝试了@maba建议的解决方案,但仍然无法正常工作

launcher.properties不应位于名为Login的文件夹下。 它应该直接放在src/main/resources/com/abc/xyz文件夹中。


这真的很简单,但如果资源文件夹没有标记为源文件夹,那么这可能就是问题所在。

这是初始类和设置:

在此处输入图像描述

现在创建资源文件夹:

在此处输入图像描述

在此处输入图像描述

这个新创建的文件夹应该自动标记为源文件夹,如果是蓝色标记,那么它就是。 否则你必须手动标记它:

在此处输入图像描述

现在,您将能够向其添加包:

在此处输入图像描述

在此处输入图像描述

现在您可以将文件添加到它:

在此处输入图像描述

在此处输入图像描述

并且重新运行应用程序将不会返回任何null值:

在此处输入图像描述

包视图肯定会显示launchers.properties文件:

在此处输入图像描述

正如@maba指出的那样,您的属性文件应该与您的类在同一个包中,以便您的代码可以工作。

所以,你应该有两个文件:

  • 的src / main / JAVA / COM / ABC / XYZ / Login.java
  • SRC /主/资源/ COM / ABC / XYZ / launcher.properties

如果IntelliJ显示资源与否,则问题旁边。 您需要做的是检查结果是否包含在目标人工制品中。

在IntelliJ中进行build all ,使用您喜欢的ZIP查看器打开生成的WAR / JAR / EAR,然后浏览到“com / abc / xyz”文件夹。 你应该在那里看到两个文件。

  • 如果是,您在代码中做错了。 检查拼写错误,特别是结尾或开头的点和空格(例如“launcher.properties [space]”),复制/粘贴文件名以确保
  • 如果它们不存在,则IntelliJ设置错误。 资源不会包含在您的目标构建中。 使用IntelliJ创意在线查看如何执行此操作的教程 。

不……结构是错误的….你不应该在resources下创建相同的包,这是丑陋的,不恰当的: resources是资源,不应该包含源包。

使用ClassLoader.getResources(asStream)(path)方法时,该方法只是从类路径的根开始搜索,路径名不能以/作为前导字符开头。 您需要做的是将resources标记为IntelliJ中的resources folder 。 然后resources下的文件将列在classpath下,您可以像使用它一样轻松地使用它们。

(我在之前的答案中看到这个选项在2013年还没有,你只有mark as source folder ,就像在Eclipse中一样,我们有“添加源文件夹”,但是现在2018年它可以在Intellij中使用:你可以标记一个文件夹作为源,资源,测试源,测试资源,所有这些都将添加到类路径的根目录。)