简体   繁体   中英

How to read a file from a java class, both are in the same 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 ?

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.

Try the absolute path:

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

The Javadoc for getResourceAsStream says:

  • If the name begins with a '/' ('\/'), 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 '.' ('\.').

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM