模板文件放在resource目錄下
<resources>
<resource>
<filtering>true</filtering>
<directory>src/resources</directory>
<includes>
<include>*.*</include>
</includes>
</resource>
</resources>
</resources>
確保資源文件加載,地址為相對路徑。編譯后resource與java代碼在同級目錄class下。
第一種:
ClassPathResource classPathResource = new ClassPathResource("excleTemplate/test.xlsx");
InputStream inputStream =classPathResource.getInputStream();
第二種:
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("excleTemplate/test.xlsx");
第三種:
InputStream inputStream = this.getClass().getResourceAsStream("/excleTemplate/test.xlsx");
第四種:
File file = ResourceUtils.getFile("classpath:excleTemplate/test.xlsx");
InputStream inputStream = new FileInputStream(file);
經測試:
前三種方法在開發環境(IDE中)和生產環境(linux部署成jar包)都可以讀取到,第四種只有開發環境 時可以讀取到,生產環境讀取失敗。
推測主要原因是springboot內置tomcat,打包后是一個jar包,因此通過文件讀取獲取流的方式行不通,因為無法直接讀取壓縮包中的文件,讀取只能通過流的方式讀取。
前三種都可以讀取到其實殊途同歸,直接查看底層代碼都是通過類加載器讀取文件流,類加載器可以讀取jar包中的編譯后的class文件,當然也是可以讀取jar包中的文件流了。