jar中的classpath资源

我有一个项目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")

ClassLoader.getResource()是否有效? 目前,您只是指定要使用系统类加载器。