在编写完代码后,我们本地使用idea或eclipse把项目跑起来运行,获取resources文件夹下目录的文件时,不会出现问题,但是打成jar包后运行,总是出现null指针异常,我们通过日志可以看出获取文件的时候路径是:
代码中我们是这么写的:
String filePath = PBCDownloadBiz.class.getClassLoader().getResource("reportTemplate/demo1.xls").getFile();
FileInputStream fileInputStream = null;
Workbook hssfWorkbook = null;
//读取file文件解析
try {
fileInputStream = new FileInputStream(filePath);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//Excel 2003
hssfWorkbook = new HSSFWorkbook(fileInputStream);
这么写在用idea或eclipse运行测试时没有问题的,原因:idea或eclipse运行的时候是获取的文件夹下的文件,但是spring boot 将项目打包为jar,使用 java - jar 包名 在服务器上运行。这时候文件为打包文件,不能通过路径方式获取到文件。好比不能读取压缩包中的文件,必须先解压缩。我们要以获取流的方式获取数据(.class.getResourceAsStream(“111.xls”))。代码示例:
InputStream resourceAsStream = PBCDownloadBiz.class.getResourceAsStream("/reportTemplate/CentralBank299.xls");
Workbook hssfWorkbook = null;
try {
hssfWorkbook = new HSSFWorkbook(resourceAsStream);
} catch (IOException e) {
log.error("格式不对", e);
e.printStackTrace();
}
重新打包,我们发现获取jar包中文件就不会出现null指针异常的问题了。