Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to read a file from a java class, both are in the same jar

Tags:

java

jar

I have following structure in jar

myjar.jar -> com -> MYProgram.class

       -> file.txt

In MYProgram i am trying to do:

getClass().getResourceAsStream("../file.txt")

I am getting NullpointerException when i try to read the inputstream..

Where is it going wrong ?

like image 748
harshit Avatar asked Nov 27 '25 09:11

harshit


2 Answers

Either use

getClass().getResourceAsStream("/file.txt")

or

getClass().getClassLoader().getResourceAsStream("file.txt")

(ClassLoader.getResourceAsStream always takes an "absolute" resource name.)

I don't believe navigating up the "directory hierarchy" works in getResourceAsStream - the path either has to be relative to the given class but without navigating back up the tree, or it has to be absolute to start with.

like image 151
Jon Skeet Avatar answered Nov 29 '25 21:11

Jon Skeet


Try the absolute path:

getClass().getResourceAsStream("/file.txt")

The Javadoc for getResourceAsStream says:

  • If the name begins with a '/' ('\u002f'), then the absolute name of the resource is the portion of the name following the '/'.
  • Otherwise, the absolute name is of the following form:

        modified_package_name/name
    

    Where the modified_package_name is the package name of this object with '/' substituted for '.' ('\u002e').

This would turn your path into this absolute path:

/com/../file.txt

I don't think the .. notation is respected. It literally looks for the above absolute path.

like image 40
Mark Peters Avatar answered Nov 29 '25 22:11

Mark Peters



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!