来源:有一个应用,需从db中汇总数据,再填充到excel表中。因为表头比较复杂,所以采用了一个偷懒的办法:直接创建一个excel模板文件,设计好表头,再预留指定位置等待程序填充。应用在本地运行良好,但打包发布到K8S环境后却发现无法打开指定excel文件,直接生成了一个新的空白文件。
排故过程:经跟踪程序路径发现,运行时的路径为 file:/app.jar!/BOOT-INF/classes!/excel/xxx.xlsx
经百度了解,jar包 中的文件只能通过流的方式读取
修改代码如下:
# 原代码:
ExcelWriter writer = ExcelUtil.getWriter("excel/xxx.xlsx");
# 修改如下:
InputStream stream = getClass().getClassLoader().getResourceAsStream("excel/xxx.xlsx"); //打成jar后的静态文件要以流的形式访问
File excelFile = new File("xxx.xlsx");
FileUtils.copyInputStreamToFile(stream,excelFile);
ExcelWriter writer = ExcelUtil.getWriter(excelFile);