Reading a resource file from within jar

1.6K    Asked by DaniloGuidi in Devops , Asked on Jul 5, 2021

 I would like to read a resource from within my jar like so:

File file;
file = new File(getClass().getResource("/file.txt").toURI());
BufferredReader reader = new BufferedReader(new FileReader(file));
//Read the file

and it works fine when running it in Eclipse, but if I export it to a jar the run it there is an IllegalArgumentException:

Exception in thread "Thread-2"
java.lang.IllegalArgumentException: URI is not hierarchical

and I really don't know why but with some testing I found if I change

file = new File(getClass().getResource("/file.txt").toURI());

to

file = new File(getClass().getResource("/folder/file.txt").toURI());

then it works the opposite (it works in jar but not eclipse).

I'm using Eclipse and the folder with my file is in a class folder.

Answered by Dipesh Bhardwaj

Rather than trying to address the resource as a File just ask the ClassLoader to return an InputStream for the resource instead via getResourceAsStream:

InputStream in = getClass().getResourceAsStream("/file.txt"); 
BufferedReader reader = new BufferedReader(new InputStreamReader(in));

As continued as the file.txt resource is accessible on the classpath then this approach will serve the same way regardless of whether the file.txt device is in a classes/ directory or inside a jar.

The URI is not hierarchical happens because the URI for a store within a jar file is going to look something like this:

file:/example.jar!/file.txt. You cannot read the entries within a jar (a zip file) like it was a plain old File.



Your Answer

Interviews

Parent Categories