从 src/main/resources 读取会给 NullPointerException

2022-09-01 06:47:38

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

 InputStream in = new
 FileInputStream("src/main/resources/WBU_template.xls");

一切都还好。

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

     private static final String TEMPLATEFILE = "/WBU_template.xls";
     InputStream in = this.getClass.getResourceAsStream(TEMPLATEFILE);

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

我也试过这个:

URL u = this.getClass().getResource(TEMPLATEFILE);
System.out.println(u.getPath());

控制台显示.../目标/类/WBU_template.xls然后获取我的NullPointer。

我做错了什么?


答案 1

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

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

当您使用它时,它会考虑文件名的位置与调用类的位置相同。.getClass().getResource(fileName)

当您使用它时,请考虑文件名的位置是根 - 换句话说,bin文件夹。.getClass().getClassLoader().getResource(fileName)

使用类装入器装入时,文件应位于src/main/resources

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


答案 2

我通常像这样从WEB-INF加载文件

session.getServletContext().getResourceAsStream("/WEB-INF/WBU_template.xls")

推荐