【sprint】jar包getFile問題

獲取文件路徑的代碼

File path = null;
try {
    path = new File(ResourceUtils.getURL("classpath:").getPath());
} catch (Exception e) {
    e.printStackTrace();
}

本地調試運行均沒有任何問題,打成jar包後部署到服務器上報錯FileNotFoundException

使用絕對路徑或者使用ResourceUtils.getFile等方式均同樣出現以上問題

錯誤原因:
ResouceUtils.getFile()是專門用來加載非壓縮文件類型的資源的,所以它根本不會去讀取jar包中的資源,本地之所以沒事是因爲本地訪問的不是jar而是直接編譯的

解決方法:
要想讀取jar包中的文件,只能通過流來進行讀取,可以使用new ClassPathResource(filepath)

代碼如下

ClassPathResource resource = new ClassPathResource("");
// 獲取文件路徑
String path = resource.getURL().getPath();
// 獲取文件名稱
filename = resource.getFilename();
// 獲取文件流
InputStream inputStream = resource.getInputStream();

打成jar包後,可成功正常運行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章