您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“SpringBoot ClassPathResource出現(xiàn)FileNotFoundException怎么解決”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“SpringBoot ClassPathResource出現(xiàn)FileNotFoundException怎么解決”吧!
SpringBoot 項(xiàng)目將項(xiàng)目打包成jar包,使用ClassPathResource時(shí)使用的是絕對(duì)路徑,直接調(diào)用getFile()方法會(huì)報(bào)
FileNotFoundException
直接上代碼:
通過賦值文件為臨時(shí)文件的方式解決
val resource = ClassPathResource("my.keystore") val temp = Files.createTempFile("my.keystore", "tmp") Files.copy(resource.inputStream, temp, StandardCopyOption.REPLACE_EXISTING)
this.getClass().getClassLoader().getResourceAsStream("apiclient_cert.p12");
使用SpringBoot遇到的大坑
在讀取springBoot+gradle構(gòu)建的項(xiàng)目時(shí),如果使用傳統(tǒng)的FileInputStream讀取文件流或者ResourceUtils工具類的方式,都會(huì)失敗,下面解釋原因:
1. ResourceUtils工具類
import org.springframework.util.ResourceUtils; //使用: File file= ResourceUtils.getFile("classpath:test.txt");
2. FileInputStream文件流的方式讀取
(該方式為按行讀取,若不是按行處理,需要像圖中將每行數(shù)據(jù)存在一個(gè)buffer中,然后轉(zhuǎn)成String處理)
3. ClassPathResource獲取文件流的方式
ClassPathResource classPathResource = new ClassPathResource("test.txt");
獲取文件:classPathResource .getFile();
獲取文件流:classPathResource .getInputStream();
有兩種常見的web容器:
1. 第一種是普通的web項(xiàng)目,特點(diǎn)是jar/war壓縮包會(huì)隨著容器的啟動(dòng)解壓縮成一個(gè)文件夾,當(dāng)項(xiàng)目訪問的時(shí)候,實(shí)際是訪問文件夾,而非jar或者war包。
該種方式下,用獲取路徑的方法:
this.getClass().getResource("/")+fileName
或者獲取流的方法:
this.getClass().getResourceAsStream(failName);
都可以成功。
2. 第二種是內(nèi)嵌web容器,Spring boot就是內(nèi)嵌web容器,其特點(diǎn)是只有一個(gè)jar文件,在容器啟動(dòng)后不會(huì)解壓縮,項(xiàng)目實(shí)際訪問的就是jar/war包
該種方式最容易遇坑??!最大的坑就是,
this.getClass().getResource("/")+fileName
在本地windows下能完美找到路徑,可是在linux測(cè)試服務(wù)器下就失敗,所以讀取jar中的文件只能用流讀取,不能用file,即只能用方式三讀取。
所以,用spring boot搭建的工程,只能用
classPathResource .getInputStream();
到此,相信大家對(duì)“SpringBoot ClassPathResource出現(xiàn)FileNotFoundException怎么解決”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。