Accessing JAR resources
I have a jar
file with resources (mainly configuration for caches, logging, etc) that I want to distribute.
I'm having a problem with the relative paths for those resources, so I did what I've found in another stackoverflow question, which said that this was a valid way:
ClassInTheSamePackageOfTheResource.class.getResourceAsStream('resource.xml');
开发者_运维技巧
Sadly this does not work.
Any ideas? Thanks!
PS: Obviously I cannot use absolute paths, and I'd like to avoid environment variables if possible
Make sure that your resource folder is listed as a source folder in your project settings. Also, make sure that the resource folder is set to export when you build your jar.
You can add a .zip extension to your jar file then open it up to ensure that your resources are included and at the expected location.
I always use absolute paths like this:
InputStream input = this.getClass().getResourceAsStream("/image.gif");
When you use absolute paths, "/" is the root folder in the jar file, not the root folder of the host machine.
I always have to puzzle through getResourceAsStream
to make this work. If "resource.xml" is in org/pablo/opus
, I think you want this:
Name.class.getResourceAsStream("org.pablo.opus.resource.xml");
where the resource.xml found? If in the root of the source tree, try to prefix it with /.
I usually store files and other resources and then retrieve them as URLs:
URL url = MyClass.class.getResource("/design/someResource.png");
Within a static context, or otherwise:
URL url = getClass().getResource("/design/someResource.png");
From an instance.
The above snippets assume that design is a top level folder within the jar. In general, if the path begins with a "/" it assumes an absolute path, otherwise it's relative from the class location.
精彩评论