Class.getResourceAsStream和ClassLoader.getResourceAsStream方法
項(xiàng)目中,有時(shí)候要讀取當(dāng)前classpath下的一些配置文件,下面介紹下Class.getResourceAsStream和ClassLoader.getResourceAsStream兩種方法以及兩者的區(qū)別。
1.?Class.getResourceAsStream
首先, 我們必須先了解根路徑“/”是如何定義的,這對(duì)我們使用getResourceAsStream準(zhǔn)確加載文件是很重要的。
首先,我們要明白這個(gè)根路徑是對(duì)應(yīng)類所處類路徑上的根目錄!什么意思呢?假如一個(gè)項(xiàng)目經(jīng)過(guò)編譯之后生成了如下class文件和目錄結(jié)構(gòu):
com |-github |-test | |-Test1.class | |-testdata1.txt |-Test2.class |-testdata2.tx2 在這樣的編譯輸出目錄下,文件"testdata1.txt"的絕對(duì)路徑名為:"/com/github/test/testdata1.txt"?文件"testdata2.txt"的絕對(duì)路徑名為:"/com/github/testdata2.txt" 如同getResourceAsStream方法文檔上的解釋:以/開(kāi)頭時(shí)是絕對(duì)路徑,與類路徑不同的是路徑上的"."換成了"/"。如果使用eclipse,則如圖:
則classes這個(gè)目錄下面為根目錄。
相對(duì)路徑:相對(duì)”路徑總是指相對(duì)于當(dāng)前class的路徑。
例如:
InputStream is= Test1.class.getResourceAsStream("testdata1.txt");路徑不是以/開(kāi)頭,說(shuō)明這是一個(gè)相對(duì)路徑,相對(duì)的是Test1.class這個(gè)文件,所以,這里的“testdata1.txt”所指的正確位置是與Test1.class處于同一目錄下的testdata1.txt文件,這一文件是存在的,所引不會(huì)報(bào)錯(cuò)。
如果我們按相對(duì)路徑的方式通過(guò)Test1去加載testdata2.txt,則路徑應(yīng)該這樣描述:
InputStream is= Test1.class.getResourceAsStream("../testdata2.txt");用“.."表示上一級(jí)目錄。
如果我們按相對(duì)路徑的方式通過(guò)Test2去加載testdata1.txt,則路徑應(yīng)該這樣描述:? ?
InputStream is= Test2.class.getResourceAsStream("test/testdata1.txt");注意:test前是沒(méi)有"/"的,這是一個(gè)相對(duì)路徑,是相對(duì)于Test2所在包下的test子包里的testdata1.txt文件,所以這個(gè)路徑也是正確無(wú)誤的。
不以"/"開(kāi)頭時(shí)默認(rèn)是從此類所在的包下取資源,以"/"開(kāi)頭則是從ClassPath(Src根目錄)根下獲取。
2. ClassLoader.getResourceAsStream
Class.getResourceAsStream最終調(diào)用是ClassLoader.getResourceAsStream
在使用ClassLoader.getResourceAsStream時(shí),路徑直接使用相對(duì)于classpath的絕對(duì)路徑,默認(rèn)是從ClassPath根下獲取,并且不能以"/"開(kāi)頭。
有以下規(guī)則:
1. 如果參數(shù)以"/"開(kāi)頭,則去除"/"。
2.?否則把當(dāng)前類的包名加在參數(shù)的前面。
InputStream resourceAsStream = ClassLoader.getSystemResourceAsStream("com/github/demo/1.txt");?
轉(zhuǎn)載于:https://www.cnblogs.com/lujiango/p/9674392.html
總結(jié)
以上是生活随笔為你收集整理的Class.getResourceAsStream和ClassLoader.getResourceAsStream方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数字经济论坛、阿里研究院、毕马威联合发布
- 下一篇: 我要做 Android 之面笔试总结