jar 中的类路径资源

2022-09-01 21:54:24

我有一个项目A,其中包含一些java文件和一个类路径资源R.txt。在项目中,我使用ClassLoader.getSystemResource(“R.txt”);以检索 R.txt。

然后我有一个项目B,其中包括项目A的jar文件。现在 getSystemResource(“R.txt”) 找不到文本文件(是的,它仍然在 jar 文件的根目录中)。即使尝试“/R.txt”,如其他网站上所建议的那样,也不起作用。有什么想法吗?


答案 1

使用 而不是使用特定于给定类装入器而不是系统的资源。例如,请尝试以下任一操作:getResourcegetSystemResource

URL resource = getClass().getClassLoader().getResource("R.txt");
URL resource = Foo.class.getClassLoader().getResource("R.txt");
URL resource = getClass().getResource("/R.txt");
URL resource = Foo.class.getResource("/R.txt");

在调用 Class.getResource 而不是 ClassLoader.getResource 时,请注意前导斜杠; 相对于包含类的包,除非您有前导斜杠,而 始终是绝对的。Class.getResourceClassLoader.getResource


答案 2

显然,您的JAR不是由系统类加载器加载的,因此无法正常工作。这应该有效:getSystemResource()

ClassFromProjectA.class.getClassLoader().getResource("R.txt")

IMO更方便的是将资源放在与使用它们的类相同的包中,因此您可以使用较短的

ClassFromProjectA.class.getResource("R.txt")

(或者,在该类中getClass().getResource("R.txt"))


推荐