使用SpringBoot獲取resources文件路徑
獲取resources文件路徑
背景
在SpringBoot項(xiàng)目中,需要獲取resources文件的路徑,網(wǎng)上找了好多文章都不行,后面還是結(jié)合官方文檔實(shí)現(xiàn)了,這里記錄下,我使用的版本是SpringBoot2.x版本
解決方案
1、獲取resources文件夾路徑
File directory = new File("xxx/xxx/src/main/resources");
String reportPath = directory.getCanonicalPath();xxx為你的項(xiàng)目?jī)?nèi)包的名稱(chēng),F(xiàn)ile只會(huì)找到項(xiàng)目最外層地址;
這里需要注意,不能在xxx前面加/,否則只會(huì)找到頂層地址
獲取resource下文件夾路徑的坑
現(xiàn)在有個(gè)需求是需要利用模板文件生成HTML 或者 PDF 文件,然后由于HTML 模板文件里面包含圖片和字體,然后我就在resource 文件夾下新建了一個(gè)文件夾,然后又分類(lèi),也就是 resource 下面有個(gè) upload文件夾,有個(gè) templateFile 文件夾,然后才是模板文件。也就是說(shuō)模板文件在resource下面兩級(jí)目錄里面,那么問(wèn)題來(lái)了。用了各種辦法,就是獲取不到這個(gè)文件。。。。。。。。
前提是maven項(xiàng)目的pom文件里面配置了
maven打包包含這些模板文件:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.png</include>
<include>**/*.html</include>
<include>**/*.ttf</include>
<include>**/*.TTF</include>
<include>**/*.ttc</include>
</includes>
<!--是否替換資源中的屬性-->
<filtering>false</filtering>
</resource>
</resources>
</build>然后install后,可以在當(dāng)前模塊或者項(xiàng)目的 target 文件夾下可以看到我們的模板文件。
這是后來(lái)我修改后的正常打包情況

其中代碼里面,用了好評(píng)率最高的這個(gè) ClassPathResource
import org.springframework.core.io;
Resource resource = new ClassPathResource("upload/templateFile");
log.info("contextPath:{}", resource.getURL());這時(shí)候,按照理想情況,應(yīng)該就是可以打印出來(lái) templateFile 這個(gè)文件夾所在的絕對(duì)路徑了。如果這個(gè)文件夾存在resource下面,是可以拿到這個(gè)文件夾的絕對(duì)路徑的。
事實(shí)確是空的。。。。。就很神奇,剛開(kāi)始以為。是不是因?yàn)楦鷦e人的項(xiàng)目不一樣,才導(dǎo)致的這個(gè)問(wèn)題呢。
后面踩坑了半天,發(fā)現(xiàn),是不是路徑太深了,把往前提一層呢,就試下把 templateFile 直接放到 resources 下面,再次嘗試,發(fā)現(xiàn)上面日志不再是空的了,可以正常取到模板文件所在的絕對(duì)路徑了。這點(diǎn)windows和Linux都是可以的。
然后看似問(wèn)題解決了,但是由于我這邊部署使用docker鏡像部署的,獲取模板文件和生成文件也是正常的,但是由于生成的HTML文件用到了各種logo圖片文件,然后生成的文件所在位置也掛載到宿主機(jī)上了,在容器內(nèi)部查看生成的文件是正常的,但是到了宿主機(jī)上,生成的HTML文件里面的圖片就不顯示了。
期間嘗試了使用文件服務(wù)器上的圖片,是可以正常顯示的,但是由于文件服務(wù)器跟外網(wǎng)不通,所以生成的文件,放到別的地方,圖片就不顯示了。
最后還是采用最笨的方法,將容器內(nèi)部的某個(gè)路徑掛載到宿主機(jī)的同名路徑上,在宿主機(jī)的文件夾下存放固定的模板文件和需要用到的圖片,路徑硬編碼寫(xiě)死到程序里面,也是可以正常生成文件和回顯的。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Springboot獲取jar包中resources資源目錄下的文件
- SpringBoot中讀取jar包中的resources目錄下的文件的三種方式
- springboot項(xiàng)目讀取resources目錄下的文件的9種方式
- springboot讀取resources下文件的方式詳解
- 解決@springboottest注解無(wú)法加載src/main/resources目錄下文件
- 解決springboot項(xiàng)目找不到resources目錄下的資源問(wèn)題
- SpringBoot部署到Linux讀取resources下的文件及遇到的坑
- springboot項(xiàng)目獲取resources相對(duì)路徑的方法
- Springboot 項(xiàng)目讀取Resources目錄下的文件(推薦)
- 如何獲取jar包resources文件路徑
相關(guān)文章
Springboot實(shí)現(xiàn)XSS漏洞過(guò)濾的示例代碼
這篇文章主要介紹了Springboot實(shí)現(xiàn)XSS漏洞過(guò)濾的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
SpringBoot3中數(shù)據(jù)庫(kù)集成實(shí)踐詳解
項(xiàng)目工程中,集成數(shù)據(jù)庫(kù)實(shí)現(xiàn)對(duì)數(shù)據(jù)的增曬改查管理,是最基礎(chǔ)的能力,所以下面小編就來(lái)和大家講講SpringBoot3如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)集成,需要的可以參考下2023-08-08
Spring大白話之三級(jí)緩存如何解決循環(huán)依賴問(wèn)題
Spring通過(guò)三級(jí)緩存(singletonObjects、earlySingletonObjects、singletonFactories)解決單例循環(huán)依賴,三級(jí)緩存使用Lambda表達(dá)式提前暴露bean的早期引用,確保在遞歸調(diào)用時(shí)能夠正確獲取對(duì)象實(shí)例,避免死循環(huán)2025-02-02
Java8 實(shí)現(xiàn)stream將對(duì)象集合list中抽取屬性集合轉(zhuǎn)化為map或list
這篇文章主要介紹了Java8 實(shí)現(xiàn)stream將對(duì)象集合list中抽取屬性集合轉(zhuǎn)化為map或list的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
java并發(fā)之ArrayBlockingQueue詳細(xì)介紹
這篇文章主要介紹了java并發(fā)之ArrayBlockingQueue詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2017-05-05
Java中使用Closeable接口自動(dòng)關(guān)閉資源詳解
這篇文章主要介紹了Java中使用Closeable接口自動(dòng)關(guān)閉資源詳解,Closeable接口繼承于AutoCloseable,主要的作用就是自動(dòng)的關(guān)閉資源,其中close()方法是關(guān)閉流并且釋放與其相關(guān)的任何方法,如果流已被關(guān)閉,那么調(diào)用此方法沒(méi)有效果,需要的朋友可以參考下2023-12-12
Spring?中的?Service?有多個(gè)實(shí)現(xiàn)類(lèi)如何注入(多種方式)
這篇文章主要介紹了Spring?中的?Service?有多個(gè)實(shí)現(xiàn)類(lèi)如何注入,本文通過(guò)多種方式結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07

