jar中的classpath资源

Joh*_*erg 22 java resources jar classpath

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

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

Jon*_*eet 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");
Run Code Online (Sandbox Code Playgroud)

请注意调用时的前导斜杠Class.getResource而不是ClassLoader.getResource; Class.getResource除非您有一个前导斜杠,否则它是相对于包含该类的包,而ClassLoader.getResource始终是绝对的.

  • @EnsomHodder:嗯,不确定 - 但并非所有资源*都是*文件 - 特别是,如果它在jar文件中则不会. (2认同)

Mic*_*rdt 5

显然你的JAR没有被系统类加载器加载,所以getSystemResource()无法工作.这应该工作:

ClassFromProjectA.class.getClassLoader().getResource("R.txt")
Run Code Online (Sandbox Code Playgroud)

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

ClassFromProjectA.class.getResource("R.txt")
Run Code Online (Sandbox Code Playgroud)

(或者,在那个班级里面getClass().getResource("R.txt"))