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()是否有效? 目前,您只是指定要使用系统类加载器。