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();
}
}
请注意,您不需要提供资源的完整路径。只要它们在类路径中,就会找到它们。我认为这是出于设计。你到底想解决什么问题?对不起,我想我应该提一下。我的程序在指定路径时无法加载资源。