日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Class.getResourceAsStream和ClassLoader.getResourceAsStream方法

發布時間:2025/4/5 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Class.getResourceAsStream和ClassLoader.getResourceAsStream方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

項目中,有時候要讀取當前classpath下的一些配置文件,下面介紹下Class.getResourceAsStream和ClassLoader.getResourceAsStream兩種方法以及兩者的區別。

1.?Class.getResourceAsStream

首先, 我們必須先了解根路徑“/”是如何定義的,這對我們使用getResourceAsStream準確加載文件是很重要的。

首先,我們要明白這個根路徑是對應類所處類路徑上的根目錄!什么意思呢?假如一個項目經過編譯之后生成了如下class文件和目錄結構:

com |-github |-test | |-Test1.class | |-testdata1.txt |-Test2.class |-testdata2.tx2 在這樣的編譯輸出目錄下,文件"testdata1.txt"的絕對路徑名為:"/com/github/test/testdata1.txt"?文件"testdata2.txt"的絕對路徑名為:"/com/github/testdata2.txt" 如同getResourceAsStream方法文檔上的解釋:以/開頭時是絕對路徑,與類路徑不同的是路徑上的"."換成了"/"。

如果使用eclipse,則如圖:

則classes這個目錄下面為根目錄。

相對路徑:相對”路徑總是指相對于當前class的路徑。

例如:

InputStream is= Test1.class.getResourceAsStream("testdata1.txt");  

路徑不是以/開頭,說明這是一個相對路徑,相對的是Test1.class這個文件,所以,這里的“testdata1.txt”所指的正確位置是與Test1.class處于同一目錄下的testdata1.txt文件,這一文件是存在的,所引不會報錯。

如果我們按相對路徑的方式通過Test1去加載testdata2.txt,則路徑應該這樣描述:

InputStream is= Test1.class.getResourceAsStream("../testdata2.txt");

用“.."表示上一級目錄。

如果我們按相對路徑的方式通過Test2去加載testdata1.txt,則路徑應該這樣描述:? ?

InputStream is= Test2.class.getResourceAsStream("test/testdata1.txt");

注意:test前是沒有"/"的,這是一個相對路徑,是相對于Test2所在包下的test子包里的testdata1.txt文件,所以這個路徑也是正確無誤的。

不以"/"開頭時默認是從此類所在的包下取資源,以"/"開頭則是從ClassPath(Src根目錄)根下獲取。  

2. ClassLoader.getResourceAsStream

Class.getResourceAsStream最終調用是ClassLoader.getResourceAsStream

在使用ClassLoader.getResourceAsStream時,路徑直接使用相對于classpath的絕對路徑,默認是從ClassPath根下獲取,并且不能以"/"開頭。

有以下規則:
1. 如果參數以"/"開頭,則去除"/"。

2.?否則把當前類的包名加在參數的前面。

InputStream resourceAsStream = ClassLoader.getSystemResourceAsStream("com/github/demo/1.txt");

?

 

轉載于:https://www.cnblogs.com/lujiango/p/9674392.html

總結

以上是生活随笔為你收集整理的Class.getResourceAsStream和ClassLoader.getResourceAsStream方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。