In my Maven project, I have a xls file in src/main/resources.
When I read it like this:
InputStream in = new
FileInputStream("src/main/resources/WBU_template.xls");
everything is ok.
However I want to read it as InputStream with getResourceAsStream. When I do this, with or without the slash I always get a NPE.
private static final String TEMPLATEFILE = "/WBU_template.xls";
InputStream in = this.getClass.getResourceAsStream(TEMPLATEFILE);
No matter if the slash is there or not, or if I make use of the getClassLoader() method, I still get a NullPointer.
I also have tried this :
URL u = this.getClass().getResource(TEMPLATEFILE);
System.out.println(u.getPath());
the console says…/target/classes/WBU_template.xls
and then get my NullPointer.
What am I doing wrong ?
FileInputStream will load a the file path you pass to the constructor as relative from the working directory of the Java process.
getResourceAsStream() will load a file path relative from your application’s classpath.
When you use
.getClass().getResource(fileName)it considers the location of the fileName is the same location of the of the calling class.When you use
.getClass().getClassLoader().getResource(fileName)it considers the location of the fileName is the root – in other words bin folder.
The file should be located in
src/main/resourceswhen loading using Class loaderIn short, you have to use
.getClass().getClassLoader().getResource(fileName)to load the file in your case.