Class.getResourceAsStream 和 ClassLoader.getResourceAsStream
這兩個方法仍是略有區別的, 之前一直不加以區分,直到今天發現要寫這樣的代碼的時候運行
錯誤, 才把這個問題澄清了一下。
基本上,兩個均可以用於從 classpath 裏面進行資源讀取, classpath包含classpath中的路徑
和classpath中的jar。
兩個方法的區別是資源的定義不一樣, 一個主要用於相對與一個object取資源,而另外一個用於取相對於classpath的
資源,用的是絕對路徑。
在使用Class.getResourceAsStream 時, 資源路徑有兩種方式, 一種以 / 開頭,則這樣的路徑是指定絕對
路徑, 若是不以 / 開頭, 則路徑是相對與這個class所在的包的。
在使用ClassLoader.getResourceAsStream時, 路徑直接使用相對於classpath的絕對路徑。
舉例,下面的三個語句,實際結果是同樣的:
com.explorers.Test.class.getResourceAsStream("abc.jpg")
= com.explorers.Test.class.getResourceAsStream("/com/explorers/abc.jpg")
= ClassLoader.getResourceAsStream("com/explorers/abc.jpg")java