开发者

Classpath resource within jar

开发者 https://www.devze.com 2022-12-14 10:36 出处:网络
I have a project A, which contains some java files and a classpath resource R.txt. Within the project I use ClassLoader.getSystemResource(\"R.txt\"); to retrieve R.txt.

I have a project A, which contains some java files and a classpath resource R.txt. Within the project I use ClassLoader.getSystemResource("R.txt"); to retrieve R.txt.

Then I have a project B which includes project A's jar-file. Now getSystemReso开发者_运维问答urce("R.txt") wont find the textfile (and yes, it's still in the root of the jar file). Even trying "/R.txt" as was suggested on some other site didn't work. Any ideas?


Use getResource instead of getSystemResource to use a resource specific to a given classloader instead of the system. For example, try any of the following:

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");

Note the leading slash when calling Class.getResource instead of ClassLoader.getResource; Class.getResource is relative to the package containing the class unless you have a leading slash, whereas ClassLoader.getResource is always absolute.


Apparently your JAR is not loaded by the system classloader, so getSystemResource() can't work. This should work:

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

IMO more convenient is putting resources inside the same package as the classes that use them, so you can use the shorter

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

(or, inside that class just getClass().getResource("R.txt"))


Does ClassLoader.getResource() work ? At the moment you're simply specifying that the system classloader is to be used.

0

精彩评论

暂无评论...
验证码 换一张
取 消