I have a nasty problem referencing resources when using a Maven project and Jar files...
I have all my resources in a dedicated folder /src/main/resources which is part of the build path in Eclipse. Files are referenced using
getClass().getResource("/filename.txt")
This works fine in Eclipse but fails in the Jar file - there the resources are located in a folder directly below the jar's root...
Does anyone know a 'best practice' to reference a file both in the JAR and (!) in Eclipse?
Edit: The problem is that while the resources actually are located in the JAR in a folder "resources" at the top level, the above method fails to find the file...
In Java, we can use getResourceAsStream or getResource to read a file or multiple files from a resources folder or root of the classpath. The getResourceAsStream method returns an InputStream . // the stream holding the file content InputStream is = getClass(). getClassLoader().
1) click project -> properties -> Build Path -> Source -> Add Folder and select resources folder. 2) create your JAR! EDIT: you can make sure your JAR contains folder by inspecting it using 7zip. After following your EDIT tip, I learned that even though your resource file, e.g. someFile.
Once you pack the JAR, your resource files are not files any more, but stream, so getResource
will not work!
Use getResourceAsStream
.
To get the "file" content, use https://commons.apache.org/proper/commons-io/javadocs/api-release/org/apache/commons/io/IOUtils.html:
static public String getFile(String fileName) { //Get file from resources folder ClassLoader classLoader = (new A_CLASS()).getClass().getClassLoader(); InputStream stream = classLoader.getResourceAsStream(fileName); try { if (stream == null) { throw new Exception("Cannot find file " + fileName); } return IOUtils.toString(stream); } catch (Exception e) { e.printStackTrace(); System.exit(1); } return null; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With