麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

Java如何獲取當(dāng)前的jar包路徑以及如何讀取jar包中的資源

2019-11-14 22:18:59
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
java如何獲取當(dāng)前的jar包路徑以及如何讀取jar包中的資源

寫(xiě)作業(yè)的時(shí)候要輸出一個(gè)record.dat文件到j(luò)ar包的同級(jí)目錄,但是不知道怎么定位jar包的路徑。百度到的方法不很靠譜,所以在這里記錄一下。

一:使用類(lèi)路徑

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

或者

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

因?yàn)槌绦蛞呀?jīng)被打包成jar包,所以getPath()和getFile()在這里的返回值是一樣的。都是/xxx/xxx.jar這種形式。如果路徑包含Unicode字符,還需要將路徑轉(zhuǎn)碼

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

二:使用JVM

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

利用了java運(yùn)行時(shí)的系統(tǒng)屬性來(lái)得到j(luò)ar文件位置,也是/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);

來(lái)得到目錄。

path.separator在Windows系統(tǒng)下得到;(分號(hào)),在linux下得到:(冒號(hào))。也就是環(huán)境變量中常用來(lái)分割路徑的兩個(gè)符號(hào),比如在Windows下我們經(jīng)常設(shè)置環(huán)境變量PATH=xxxx/xxx;xxx/xxx;這里獲得的就是這個(gè)分號(hào)。

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




如何加載jar包中的資源。

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

/src/UI/image/background.jpg

那么在jar包中它的路徑應(yīng)該是

/UI/image/background.jpg

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

加載的時(shí)候使用

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

即可以獲得該圖片資源。

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

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

加載該資源。


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


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

比如說(shuō)我有一個(gè)ImageSource類(lèi)用來(lái)加載各種圖片資源,那么可以如下使用

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 }

這里不能用構(gòu)造函數(shù)初始化,因?yàn)闃?gòu)造函數(shù)和對(duì)象相關(guān),而static變量和對(duì)象是無(wú)關(guān)的,只和類(lèi)相關(guān)。在Java的語(yǔ)法中,類(lèi)中的static塊是不依賴(lài)類(lèi)對(duì)象的,因此可以初始化statc對(duì)象。同時(shí),static塊中不能使用this,這里使用了ImageSource.class代替。


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 日日摸夜夜添夜夜添牛牛 | 国产精品久久久不卡 | 国产免费午夜 | 黄色大片在线观看 | 国产91精品亚洲精品日韩已满 | 极品一级片 | 亚洲精品一区二区三区免 | 久久久久久久久淑女av国产精品 | 精品免费国产一区二区三区 | caoporn国产一区二区 | 一级免费 | 在线小视频国产 | 国产免费专区 | 一区二区高清视频在线观看 | 中国嫩模一级毛片 | 九九视屏 | 色骚综合 | 亚洲成人在线视频网站 | 国产性tv国产精品 | 久久免费视频8 | 欧美亚洲免费 | 伦一区二区三区中文字幕v亚洲 | 美女网站黄在线观看 | 久草视频手机在线观看 | 深夜福利视频免费观看 | 国产福利视频 | 97超级碰碰人国产在线观看 | 国产成年人视频 | 欧美日韩国产一区二区三区在线观看 | 欧美性生交zzzzzxxxxx | 一区二区网 | 久久久久久久久久综合 | 久久精品亚洲欧美日韩精品中文字幕 | 成人国产精品色哟哟 | 成人毛片100部| 久久久久久久99 | 国产精品自拍啪啪 | www.91sao| 国内精品久久久久久久久久 | 91av在线影院| 亚洲欧美在线视频免费 |