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();

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