Java中資源(resource)獲取 Class.getResource() & ClassLoader.getResource()

      Java中的資源可以是一個圖片,xml文件,音頻等等形式的文件,在開發的過程中尤其是對xml文件的使用相當頻繁。在Java中,類Class和ClassLoader中提供了相應的方法去定位這些資源,如getResource()等方法。

      資源名

      完整的資源名也就是路徑有絕對和相對之分,雖然他們都可以表示同一個資源文件,但使用起來確實有一定的差別。 在Java中,以反斜線(/)開始的路徑被認爲是絕對路徑,相反,以非反斜線(/)開始的路徑被稱爲相對路徑。我們的認識中的絕對路徑是沒有前置的反斜線(/)的,如 ,其實在Java中的表示是有前置的反斜線(/)的。Java中獲取資源的URL後真實地址是這個:

      這裏還涉及到一些系統資源與非系統資源的問題(略)。

      使用Class &ClassLoader獲取資源

  Class & ClassLoader獲取資源的時候都需要使用到資源名。資源名傳遞給Class的方法時,可以使用前置反斜線(/)表示這是一個絕對路徑,而不使用前置反斜線(/)的時候表示一個相對路徑。資源名傳遞給ClassLoader的方法時,資源文件是被看作一個Java類來加載的。

      Class

      使用Class的時候,傳遞給它的資源名稱既可以是絕對路徑,也可以是相對路徑。而反斜線(/)一般是代表編譯後的class的根目錄,而相對路徑則是相對於當前調用者所屬類的路徑。

      ClassLoader

      只用ClassLoader的時候,資源文件被看作一個類文件來加載的,傳遞給ClassLoader的名稱必須符合Java規範定義的名稱(Binary Name),對應Java的類而言,那就是包名.類名,如果把Java的Class文件也看成一種資源的話,那麼這個資源的名稱就是:包名.類名.class, 例如java.lang.String.class,這種格式的資源名稱都是從編譯後的class根目錄開始表示的(Java包的文件層次結構),而且對classpath路徑上的Jar包也是適用的。對於一般意義上的資源文件,相比Java的Class文件只是文件後綴不同而已。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章