1. Bug場景
1.1 在開發中經常需要獲取資源文件路徑,例如讀寫配置文件,獲取resource下的模板文件等
1.2 Windows獲取resource下的模板文件,在本地是可以直接獲取模板文件並操作
// 第一中方式:getDefaultClassLoader已經過期了
// String path = ClassUtils.getDefaultClassLoader().getResource("static/" + templateFilePath).getPath();
// 推薦使用這種方式
String path = this.getClass().getClassLoader().getResource("static/template/Excel.xlsx").getPath();
FileInputStream fileInputStream = new FileInputStream(paths);
1.3 Linux獲取resource下的模板文件,jar包明明是有模板文件但是報錯找不到
2. Bug原因
意思讀取不到jar包里面的文件,因為springboot是打包jar包,然后是執行運行的jar包,而不是讀取的target下面編譯好的文件。
由於 Windows 加載本地文件和 Linux 加載本地文件有區別,所以在加載本地文件時,使用方法有所不同。
3 解決方法:通過獲取流的方式操作
3.1 Windows獲取resource下的模板文件
// 第一中方式:getDefaultClassLoader已經過期了
// String path = ClassUtils.getDefaultClassLoader().getResource("static/" + templateFilePath).getPath();
// 推薦使用這種方式
String path = this.getClass().getClassLoader().getResource("static/template/Excel.xlsx").getPath();
FileInputStream fileInputStream = new FileInputStream(paths);
3.2 Linux獲取resource下的模板文件
InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("static/template/Excel.xlsx");