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

时间:2017-05-26 05:48:27

标签: java maven

我有一个具有以下目录结构的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?

Can't get path to resource

5 个答案:

答案 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)

的javadoc
  

在委托之前,从中构造绝对资源名称   使用此算法给定资源名称:

     
      
  • 如果名称以'/'('\ u002f')开头,则绝对名称为   资源是'/'后面的名称部分   否则,
  •   
  • 绝对名称的格式如下:

         

    modified_pa​​ckage_name / name

  •   
     

其中modified_pa​​ckage_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”)