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文件只是文件後綴不同而已。