繁体   English   中英

在src / main / resources中的文件的Java路径

[英]Java path to file in src/main/resources

我有一个具有以下目录结构的maven模块,我想在abc.accessabcManager.java.的路径abcManager.java.

src
 |-main
    |-java
       |-org.abc.xyz
          |-init
             |-abcManager.java
    |-resources
       |-abc.access

我尝试使用abcManager.class.getResource("abc.access")但它给出了null。

我经历了以下问题,但解决方案无效。

如何在JUnit中获取src / test / resources目录的路径?

无法获得资源的路径

问题是我没有将资源包含在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_pa​​ckage_name /名称

其中modified_pa​​ckage_name是此对象的包名称,其中'/'替换为'。' ( '\\ u002e')。

当你调用:

abcManager.class.getResource("abc.access")

您不要在路径前加上"/"字符。 所以,你使用第二种方式。
这意味着资源应位于org.abc.xyz.init包(或文件夹)中,但事实并非如此,因为资源位于resources文件夹的根目录中。
在Maven中, resourcesresources的基本目录。
因此,您可以通过调用第一种方式获取资源:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM