jar 中的类路径资源
我有一个项目A,其中包含一些java文件和一个类路径资源R.txt。在项目中,我使用ClassLoader.getSystemResource(“R.txt”);以检索 R.txt。
然后我有一个项目B,其中包括项目A的jar文件。现在 getSystemResource(“R.txt”) 找不到文本文件(是的,它仍然在 jar 文件的根目录中)。即使尝试“/R.txt”,如其他网站上所建议的那样,也不起作用。有什么想法吗?
我有一个项目A,其中包含一些java文件和一个类路径资源R.txt。在项目中,我使用ClassLoader.getSystemResource(“R.txt”);以检索 R.txt。
然后我有一个项目B,其中包括项目A的jar文件。现在 getSystemResource(“R.txt”) 找不到文本文件(是的,它仍然在 jar 文件的根目录中)。即使尝试“/R.txt”,如其他网站上所建议的那样,也不起作用。有什么想法吗?
使用 而不是使用特定于给定类装入器而不是系统的资源。例如,请尝试以下任一操作:getResource
getSystemResource
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.getResource
ClassLoader.getResource
显然,您的JAR不是由系统类加载器加载的,因此无法正常工作。这应该有效:getSystemResource()
ClassFromProjectA.class.getClassLoader().getResource("R.txt")
IMO更方便的是将资源放在与使用它们的类相同的包中,因此您可以使用较短的
ClassFromProjectA.class.getResource("R.txt")
(或者,在该类中getClass().getResource("R.txt")
)