我有一个具有以下目录结构的maven模块,我希望在abc.access
abcManager.java.
的路径
src
|-main
|-java
|-org.abc.xyz
|-init
|-abcManager.java
|-resources
|-abc.access
我使用abcManager.class.getResource("abc.access")
尝试了它,但它给出了一个空值。
我经历了以下问题,但解决方案无效。
How to get the path of src/test/resources directory in JUnit?
答案 0 :(得分:2)
试试这个:
String filename = "abc.access";
InputStream in = getClass().getClassLoader().getResourceAsStream(filename);
答案 1 :(得分:2)
问题是我没有将资源包含在pom文件中的maven构建中。当我包含以下内容时,它与abcManager.class.getResource("/abc.access")
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>abc.access</include>
</includes>
</resource>
</resources>
</build>
答案 2 :(得分:0)
根据URL java.lang.Class.getResource(String name)
:
在委托之前,从中构造绝对资源名称 使用此算法给定资源名称:
- 如果名称以'/'('\ u002f')开头,则绝对名称为 资源是'/'后面的名称部分 否则,
绝对名称的格式如下:
modified_package_name / name
其中modified_package_name是此对象的包名称,其中'/'替换为'。' ( '\ u002e')。
当您调用时:
abcManager.class.getResource("abc.access")
您不会在路径前添加"/"
个字符。所以,你使用第二种方式。
这意味着资源应该位于
org.abc.xyz.init
包(或文件夹)但不是这种情况,因为资源位于resources
文件夹的根目录中。
在Maven中,resources
是资源的基本目录
所以你可以通过调用第一种方式来获取资源:
abcManager.class.getResource("/abc.access")
或者你也可以简单地做到:
getClass().getResource("/abc.access")
答案 3 :(得分:0)
以下应该工作。
InputStream resourceAsStream =
abcManager.class.getClassLoader().getResourceAsStream("abc.access");
如果您在IDE(Ex.Eclipse)中工作。 如果从命令行尝试此操作,则需要明确设置类路径。
答案 4 :(得分:0)
class.getResource是类的本地,在本例中是包org.abc.xyz.init。您正在尝试读取src / main / resources / org / ABC / xyz / init / abc.access。除了始终从类路径根加载的类加载器之外,您还可以执行class.getResource(“/ abc.access”)