1. 程式人生 > >訪問jar檔案包中的資源

訪問jar檔案包中的資源

當你編寫一個圖形介面的程式的時候,你肯定要使用各種圖片資源。那麼,當你釋出你的程式的時候,這些圖片資源如何釋出呢?最簡潔的方式就是將這些圖片資源連同你的class檔案一起打包為一個可執行Jar檔案,這樣你只需釋出一個jar檔案就囊括了所有的內容,使用者只需雙擊該Jar檔案就能執行程式。如果把圖片打包在Jar檔案中,編寫程式的時候如何訪問這些圖片呢?這些圖片的路徑是什麼呢?可以用 getResource()方法來解決這個問題。下面我們具體分析2種最常見的情況:
1、你將所有資源打包為andy.jar,你的類位於一個包中:package andycpp;你的圖片資源全部放在images資料夾中,而images資料夾也位於andycpp包內。這樣的話,最終的路徑表現為:
andy.jar
    |__andycpp
             |__  GUITest.class
             |__  images
                         |__ Snap1.jpg
因為圖片資料夾和引用他的類位於同一個層次,因此可以通過相對路徑來訪問: getResource()方法,但是你不能隨便用,你只能使用和圖片資料夾處於同一層次的類的getResource()方法。比如上圖中,GUITest類和images處於同一層次,所以要使用該類的getResource()方法。

     java.net.URL imgURL = GUITest.class.getResource("images/Snap1.jpg");
          ImageIcon img1 = new ImageIcon(imgURL);


2、另一種情況,如果你的類有很多,並且包結構很複雜,那麼你就不大可能把圖片和類放在同一個層次上,而是應該把圖片放到最外層,讓所有的類通過絕對路徑來訪問該圖片!Jar檔案內部對大小寫是敏感的,因此,如果圖片本身叫做snap1.jpg,你把路徑寫成images/Snap1.jpg,那麼結果將找不到該圖片。還要注意的是,每個類(注意,不是物件)都有一個
andy.jar
    |__andycpp
             |__  GUITest.class
    |__  images
             |__ Snap1.jpg
程式碼如下:
java.net.URL imgURL = GUITest.class.getResource("/images/Snap1.jpg");
ImageIcon img1 = new ImageIcon(imgURL);
大家看到和上述程式碼的區別了嗎?區別非常細微,僅僅是在“images”的前面加了一個反斜槓"/",這個反斜槓就表示根目錄,沒有反斜槓就表示相對路徑。

3.File f=new File(“檔案的相對路徑”);

f.getAbsolute();