45

我有一个这样的项目结构:

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

我必须向其中添加一个资源文件并使用

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

这是给null。

在 Intellij 中,我无法在src/mainforresources文件夹下添加新包,因此项目结构如下所示。如何将launchers.properties资源文件加载到项目中?

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

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

4

7 回答 7

75

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


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

这是初始类和设置:

在此处输入图像描述

现在创建资源文件夹:

在此处输入图像描述

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

在此处输入图像描述

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

在此处输入图像描述

在此处输入图像描述

并且重新运行应用程序不会给您带来任何null价值:

在此处输入图像描述

并且包视图肯定也会显示该launchers.properties文件:

在此处输入图像描述

于 2013-09-10T11:01:30.743 回答
4

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

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

  • src/main/java/com/abc/xyz/Login.java
  • src/main/resources/com/abc/xyz/launcher.properties

IntelliJ 是否显示资源不在问题之列。您需要做的是检查结果是否包含在您的目标工件中。

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

  • 如果是这样,则说明您的代码做错了。检查拼写错误,尤其是结尾或开头的点和空格(例如“launcher.properties[space]”),复制/粘贴文件名以确保
  • 如果它们不存在,则您的 IntelliJ 设置是错误的。资源不会包含在您的目标构建中。在线查看如何使用 IntelliJ idea 的教程。
于 2013-09-10T11:36:50.620 回答
1

按照这两个步骤

1)创建目录

右键单击 ==> 新建 ==> 目录

2)将目录标记为资源根

右键单击目录 ==> 将目录标记为 ==> 资源根

于 2019-12-10T03:54:59.883 回答
0

不......结构是错误的......你不应该在 下创建相同的包resources,这是丑陋且不正确的:resources用于资源,不应包含源包。

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

(我在以前的答案中看到此选项在 2013 年尚不可用,您mark as source folder只有, 资源, 测试源, 测试资源, 所有这些都将添加到类路径的根目录中。)

于 2018-09-26T14:26:06.570 回答
0

从菜单运行/编辑 VM 选项中的配置,您应该添加 -Dspring.config.location=path-file

我已经在 IntelliJ 中尝试过,它可以工作!

于 2018-10-23T14:24:55.130 回答
0

我有同样的问题,并注意到资源文件,例如:在构建发生后my.properties没有复制到目录中相应的模块文件夹中。target为了解决这个问题,我不得不指示 Maventarget在构建过程中将资源从模块目录复制到目录中。在.pom文件中,我添加了<resource>这样的元素:

<project ...>
    ...
    <build>
        ...
        <resource>
            <directory>src/main/java/com/abc/xyz</directory>
            <targetPath>com/abc/xyz</targetPath>
        </resource>
    </build>
    ...
</project>

注意,该<directory>元素是相对于.pom文件的位置,即项目的根目录,该<targetPath>元素表示包名,用斜杠隔开。

于 2018-10-18T17:00:30.883 回答
0

只有解决方案对我有用:

文件 -> 项目结构 -> 模块 -> 依赖项选项卡 -> + 符号 -> JAR 或目录 -> 选择资源目录 -> 类

于 2020-01-31T13:02:42.883 回答