2017-05-26 54 views
1

我有以下目录结构的Maven的模块文件,我想要得到的路径abc.accessabcManager.java.Java的路径中的src/main /资源

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

+0

你应该应该使用System.getProperty( “user.dir来”);要获得当前目录的路径,并且在你getResource(“abc.access”)时连接你想要的其他路径 –

+1

,它看起来相对于当前类,所以你可能需要'/ abc.access',另请参阅https://stackoverflow.com/questions/13967307/reading-from-src-main-resources-gives-nullpointerexception?rq=1 – 2017-05-26 05:54:35

+0

@ user7790438我试着通过复制文件的路径并删除用户目录部分,以System.getProperty(“user.dir”)+“剩余路径”的形式给出路径。仍然没有工作 –

回答

1

问题是我没有在maven版本中包含pom文件中的资源。当我包括以下它abcManager.class.getResource("/abc.access")工作

<build> 
    <resources> 
     <resource> 
       <directory>src/main/resources</directory> 
       <includes> 
        <include>abc.access</include> 
       </includes> 
      </resource> 
    </resources> 
</build> 
0

试试这个:

String filename = "abc.access"; 
InputStream in = getClass().getClassLoader().getResourceAsStream(filename); 
+0

或getResource(文件名)。 –

0

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中,resources是资源的基本目录。
所以,你可以通过调用第一种方式获取资源:

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

,或者你也可以简单地做到这一点:

getClass().getResource("/abc.access") 
+0

我试过这个,但仍然给出一个null –

0

下面应该工作。

InputStream resourceAsStream = 
        abcManager.class.getClassLoader().getResourceAsStream("abc.access"); 

前提是您在IDE(例如Eclipse)中工作。 如果您正在从命令行尝试此操作,则需要明确设置类路径。

0

class.getResource对类是本地的,在这种情况下,包org.abc.xyz.init。您正在尝试读取src/main/resources/org/ABC/xyz/init/abc.access。除了总是从类路径根加载的类加载器,您还可以执行class.getResource(“/ abc.access”)