从src/main/resources读取会产生NullPointerException

dut*_*n79 35 java xls maven

在我的Maven项目中,我在src/main/resources中有一个xls文件.我这样读的时候:

 InputStream in = new
 FileInputStream("src/main/resources/WBU_template.xls");
Run Code Online (Sandbox Code Playgroud)

一切都好.

但是我想用getResourceAsStream将其作为InputStream读取.当我这样做时,无论有没有斜线,我总是得到一个NPE.

     private static final String TEMPLATEFILE = "/WBU_template.xls";
     InputStream in = this.getClass.getResourceAsStream(TEMPLATEFILE);
Run Code Online (Sandbox Code Playgroud)

无论是否存在斜杠,或者如果我使用了getClassLoader()方法,我仍然会得到一个NullPointer.

我也试过这个:

URL u = this.getClass().getResource(TEMPLATEFILE);
System.out.println(u.getPath());
Run Code Online (Sandbox Code Playgroud)

控制台说.../target/classes/WBU_template.xls然后得到我的NullPointer.

我究竟做错了什么 ?

Rah*_*hul 52

FileInputStream将从Java进程的工作目录中加载您传递给构造函数的文件路径.

getResourceAsStream()将从应用程序的类路径加载相对的文件路径.

当您使用.getClass().getResource(fileName)它时,认为fileName的位置与调用类的位置相同.

当你使用.getClass().getClassLoader().getResource(fileName) 它时,认为fileName的位置是根 - 换句话说bin文件夹.

src/main/resources使用类加载器加载时应该找到该文件

简而言之,您必须使用.getClass().getClassLoader().getResource(fileName)加载文件的情况.

  • 当我从IDE运行应用程序时,这工作正常,但是当我将应用程序编译到jar文件时,它总是在寻找路径myjar.jar!\ myfile.txt.任何线索? (3认同)