国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java如何獲取當前的jar包路徑以及如何讀取jar包中的資源

2019-11-14 22:18:59
字體:
來源:轉載
供稿:網友
java如何獲取當前的jar包路徑以及如何讀取jar包中的資源

寫作業的時候要輸出一個record.dat文件到jar包的同級目錄,但是不知道怎么定位jar包的路徑。百度到的方法不很靠譜,所以在這里記錄一下。

一:使用類路徑

1 String path = this.getClass().getPRotectionDomain().getCodeSource().getLocation().getPath();

或者

1 String path = this.getClass().getProtectionDomain().getCodeSource().getLocation().getFile();

因為程序已經被打包成jar包,所以getPath()和getFile()在這里的返回值是一樣的。都是/xxx/xxx.jar這種形式。如果路徑包含Unicode字符,還需要將路徑轉碼

path = java.net.URLDecoder.decode(path, "UTF-8");

二:使用JVM

String path = System.getProperty("java.class.path");

利用了java運行時的系統屬性來得到jar文件位置,也是/xxx/xxx.jar這種形式。



這樣,我們就獲得了jar包的位置,但是這還不夠,我們需要的是jar包的目錄。

使用

1 int firstIndex = path.lastIndexOf(System.getProperty("path.separator")) + 1;2 int lastIndex = path.lastIndexOf(File.separator) + 1;3 path = path.substring(firstIndex, lastIndex);

來得到目錄。

path.separator在Windows系統下得到;(分號),在linux下得到:(冒號)。也就是環境變量中常用來分割路徑的兩個符號,比如在Windows下我們經常設置環境變量PATH=xxxx/xxx;xxx/xxx;這里獲得的就是這個分號。

File.separator則是/(斜杠)與/(反斜杠),Windows下是/(反斜杠),Linux下是/(斜杠)。




如何加載jar包中的資源。

1. 比如說我要得到背景圖片,源代碼中它是

/src/UI/image/background.jpg

那么在jar包中它的路徑應該是

/UI/image/background.jpg

路徑最前面的/表示根目錄,即絕對路徑,若沒有最左邊的/,則表示相對路徑。使用哪種方法看自己的需求,這里使用了絕對路徑。

加載的時候使用

1 java.net.URL fileURL = this.getClass().getResource("/UI/image/background.jpg");2 javax.swing.Image backGround = new ImageIcon(fileURL).getImage();

即可以獲得該圖片資源。

2. 有時候,我們需要加載文本資源或音樂資源,而文本在Java中是以流對象存在的,這時我們就要使用

InputStream in = this.getClass().getResourceAsStream("/UI/image/background.txt");

加載該資源。


PS:注意這里兩種方法的區別,第一種是先得到該文件的路徑,再加載該文件資源。第二種則是直接加載該對象。


3.有時候,我們有一些資源類,其中的資源對象都是pulic static final修飾的,這里可以采用這樣的方法初始化。

比如說我有一個ImageSource類用來加載各種圖片資源,那么可以如下使用

1 public class ImageSource2 {3     static4     {5         URL fileURL = ImageSource.class.getResource(“/UI/image/background.jpg”);6         BACK_GROUND = new ImageIcon(fileURL).getImage();7     }8     public static final Image BACK_GROUND;9 }

這里不能用構造函數初始化,因為構造函數和對象相關,而static變量和對象是無關的,只和類相關。在Java的語法中,類中的static塊是不依賴類對象的,因此可以初始化statc對象。同時,static塊中不能使用this,這里使用了ImageSource.class代替。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 祥云县| 宜良县| 罗源县| 西充县| 连云港市| 闽清县| 南皮县| 滨州市| 张家港市| 谷城县| 蓝山县| 深水埗区| 梓潼县| 赞皇县| 五河县| 连江县| 长葛市| 那坡县| 双流县| 大关县| 彭州市| 西乌珠穆沁旗| 谢通门县| 无极县| 漳平市| 陇南市| 阳东县| 法库县| 吉水县| 大渡口区| 临安市| 凌源市| 泰顺县| 昌宁县| 咸阳市| 清原| 阿拉尔市| 通海县| 黎川县| 澳门| 阿拉善右旗|