寫項(xiàng)目時(shí)遇到代碼調(diào)試時(shí)能找到Resources巢块,打jar包后找不到的問題
在給隔壁科室開發(fā)一個(gè)小sdk初橘,該sdk的resources目錄下有幾個(gè)文件,供sdk自己使用苫幢,將該sdk引入到一個(gè)Springboot項(xiàng)目后脚草,調(diào)試時(shí)無異常赫悄,打包后發(fā)現(xiàn)文件找不到
sdk項(xiàng)目路徑
--src
+-main
+-java
+-resources
+-db
--sqlite.db
用的時(shí)getResourceAsStream
方法來查找文件
其實(shí)問題很簡(jiǎn)單,該方法傳參的路徑馏慨,在不同的情況下表示的不同
在idea項(xiàng)目?jī)?nèi)調(diào)試時(shí)埂淮,調(diào)用getResourceAsStream
時(shí)是通過文件路徑查找的,而打包jar
后写隶,是通過url
來查找的
我在使用這個(gè)方法的時(shí)候倔撞,直接用的File.separator
來拼接的文件路徑,在windows下表示為db\sqlite.db
慕趴,但是打包到jar
后痪蝇,\
符號(hào)不是url的符號(hào),需要用/
來代替冕房,所以該直接使用/
拼接db/sqlite.db
真是丟人躏啰,辭職吧
記錄一下三種getResourceAsStream
使用方式
Class.getResourceAsStream("")
從當(dāng)前類的所在包下獲取資源
Class.getResourceAsStream("/")
從classpath下獲取資源,maven項(xiàng)目下耙册,resources目錄下的文件默認(rèn)打包到classpath下
ClassLoader.getResourceAsStream()
不能以"/"開頭给僵,默認(rèn)從classpath下獲取