jar中的classpath资源

时间:2009-12-14 10:39:18

标签: java jar classpath resources

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

然后我有一个项目B,其中包含项目A的jar文件。现在getSystemResource(“R.txt”)找不到文本文件(是的,它仍然在jar文件的根目录中)。即使尝试在其他网站上建议的“/R.txt”也行不通。有任何想法吗?

3 个答案:

答案 0 :(得分:48)

使用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总是绝对的。

答案 1 :(得分:5)

显然您的JAR未被系统类加载器加载,因此getSystemResource()无效。这应该有效:

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

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

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

(或者,在该班级内只有getClass().getResource("R.txt")

答案 2 :(得分:2)

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