Classpath resource within jar

后端 未结 3 1986
别那么骄傲
别那么骄傲 2020-11-28 07:08

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.

相关标签:
3条回答
  • 2020-11-28 07:12

    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.

    0 讨论(0)
  • 2020-11-28 07:20

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

    0 讨论(0)
  • 2020-11-28 07:31

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

    0 讨论(0)
提交回复
热议问题