![](/img/trans.png)
[英]java.io.FileNotFoundException: class path resource even though file exists in src/main/resources
[英]Java path to file in src/main/resources
我有一个具有以下目录结构的maven模块,我想在abc.access
中abcManager.java.
的路径abcManager.java.
src
|-main
|-java
|-org.abc.xyz
|-init
|-abcManager.java
|-resources
|-abc.access
我尝试使用abcManager.class.getResource("abc.access")
但它给出了null。
我经历了以下问题,但解决方案无效。
问题是我没有将资源包含在pom文件中的maven构建中。 当我包含以下内容时,它使用了abcManager.class.getResource("/abc.access")
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>abc.access</include>
</includes>
</resource>
</resources>
</build>
试试这个 :
String filename = "abc.access";
InputStream in = getClass().getClassLoader().getResourceAsStream(filename);
根据URL java.lang.Class.getResource(String name)
的javadoc:
在委派之前,使用此算法从给定资源名称构造绝对资源名称:
- 如果名称以'/'('\\ u002f')开头,则资源的绝对名称是'/'后面的名称部分。
除此以外,绝对名称具有以下形式:
modified_package_name /名称
其中modified_package_name是此对象的包名称,其中'/'替换为'。' ( '\\ u002e')。
当你调用:
abcManager.class.getResource("abc.access")
您不要在路径前加上"/"
字符。 所以,你使用第二种方式。
这意味着资源应位于org.abc.xyz.init
包(或文件夹)中,但事实并非如此,因为资源位于resources
文件夹的根目录中。
在Maven中, resources
是resources
的基本目录。
因此,您可以通过调用第一种方式获取资源:
abcManager.class.getResource("/abc.access")
或者你也可以简单地做到:
getClass().getResource("/abc.access")
以下应该工作。
InputStream resourceAsStream =
abcManager.class.getClassLoader().getResourceAsStream("abc.access");
如果您在IDE(Ex.Eclipse)中工作。 如果从命令行尝试此操作,则需要明确设置类路径。
class.getResource是类的本地,在本例中是包org.abc.xyz.init。 您正在尝试读取src / main / resources / org / ABC / xyz / init / abc.access。 除了始终从类路径根加载的类加载器之外,您还可以执行class.getResource(“/ abc.access”)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.