在我的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)加载文件的情况.
| 归档时间: |
|
| 查看次数: |
38149 次 |
| 最近记录: |