Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Maven时如何获取资源的路径?_Java_Maven_Maven 2 - Fatal编程技术网

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

Java 使用Maven时如何获取资源的路径?,java,maven,maven-2,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 有人知道为什么会这样吗 编辑: 我想我应该提到,库中正在使用该路径加载资源,但失

这就是我尝试过的:

String myPath = myStaticClass.class.getResource("en-us").getPath(); 
// returns C:/Users/Charles/Workspace/ProjectName/target/classes/
我的资源位于
C:/Users/Charles/Workspace/ProjectName/src/main/resources

有人知道为什么会这样吗

编辑:

我想我应该提到,库中正在使用该路径加载资源,但失败了。

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

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

编辑

根据您的评论,尝试使用以下方法加载资源:

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

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

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

你可能忘记的是“/”在那里。如果没有“/”,它将看起来相对于类的目录


或者,您也可以这样做:
ClassLoader.getSystemClassLoader().getResource(“my.file.txt”).getPath()
。注意没有斜线

您正在询问为什么会发生这种情况,并且您说您希望加载资源

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

“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();
    }
}

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

我认为这是出于设计。你到底想解决什么问题?对不起,我想我应该提一下。我的程序在指定路径时无法加载资源。