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

时间:2012-12-20 07:37:08

标签: java maven xls

在我的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());

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

我做错了什么?

2 个答案:

答案 0 :(得分:51)

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

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

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

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

使用类加载器

加载时,文件应位于src/main/resources

简而言之,您必须使用.getClass().getClassLoader().getResource(fileName)在您的案例中加载文件。

答案 1 :(得分:2)

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

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