这是我尝试过的:
String myPath = myStaticClass.class.getResource("en-us").getPath();
// returns C:/Users/Charles/Workspace/ProjectName/target/classes/
我的资源位于C:/Users/Charles/Workspace/ProjectName/src/main/resources
有谁知道为什么会这样?
编辑:
我想我应该提到路径正在库中用于加载资源,但是失败了。
答案 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();
}
}
请注意,您无需提供资源的完整路径。只要它们在类路径中,就可以找到它们。