使用Maven时如何获取资源的路径?

时间:2014-05-21 23:01:24

标签: java maven maven-2

这是我尝试过的:

String myPath = myStaticClass.class.getResource("en-us").getPath(); 
// returns C:/Users/Charles/Workspace/ProjectName/target/classes/

我的资源位于C:/Users/Charles/Workspace/ProjectName/src/main/resources

有谁知道为什么会这样?

编辑:
我想我应该提到路径正在库中用于加载资源,但是失败了。

3 个答案:

答案 0 :(得分:3)

当您使用maven构建项目时,这就是您编译代码的位置。作为构建过程的一部分,您的资源正被复制到target / classes文件夹。

如果您随后将应用程序部署到其他位置,您会发现您的代码将返回资源的新路径。

修改

根据您的评论,请尝试使用以下内容加载资源:

InputStream resourceStream = myStaticClass.class.getClassLoader().getResourceAsStream("en-us");

这使用当前类的类加载器来定位并向您的资源提供InputStream。

答案 1 :(得分:2)

运行mvn compile时,其中一个步骤是将资源目录复制到target / classes目录。现在通常如果你调用myStaticClass.class.getResource,你传入的路径将以目标/类作为根。所以假设你在src / main / resources / my.file.txt上有一个文件你可以通过调用myStaticClass.class.getResource("/my.file.txt");获得它

你可能忘记的事情是" /"那里。没有那个" /",它将看起来相对于你的班级' 。目录

或者,你可以这样做:ClassLoader.getSystemClassLoader().getResource("my.file.txt").getPath()。注意缺少斜线。

答案 2 :(得分:0)

您在问为什么会发生这种情况并且您说要加载资源。

“为什么”:看其他帖子。没理由在这里复制它们。

“how”:以下代码显示了如何加载资源。假设它们位于名为“your.resources”的文件中,并且该文件位于类路径中;根据你的帖子,它是。

import java.io.IOException;
import java.util.Properties;

public class Test {

    public Test() throws IOException
    {
        final Properties properties = new Properties();
        properties.load(this.getClass().getResourceAsStream("your.resources"));
        System.out.println(properties);
    }
    public static void main(String[] args) throws IOException  {
        new Test();
    }
}

请注意,您无需提供资源的完整路径。只要它们在类路径中,就可以找到它们。