2012-03-27 69 views
0

我有我的jar文件中的圖像,我也使用另一個jar文件,也有圖像。 如何在運行時知道存在特定映像(資源)的jar文件。如何在運行時知道存在資源的jar?

對於一類,我可以使用

getClass().getProtectionDomain().getCodeSource().getLocation() 

但在我的情況下,它是一個形象!

+2

爲什麼你(想你)需要知道的位置?我使用'this.getClass()。getResource(「path/name.type」)在應用程序的運行時類路徑中加載了來自Jars的圖像,HTML,CSS,文本文件,XML和其他大量內容。 '獲取一個URL。如果它是一個applet或JWS應用程序。該URL將始終***指向它來自的服務器,即使它本地緩存。這是出於安全原因。簡而言之,我已經使用這些URL提供給其他方法(例如'ImageIO.read(URL)'),而無需檢查或「知道」它指向的位置。 – 2012-03-27 08:01:40

+0

他爲什麼要這樣做,爲什麼這麼重要? – 2012-03-27 08:06:12

+0

我的應用程序需要知道該jar,並基於該操作需要以不同的方式採取行動。 – user1053792 2012-03-27 08:10:59

回答

0

資源的URL格式爲jar:url-of-jar-file!entry-path。忽略錯誤檢查:

URL resURL = getClassLoader().getResource(resName); 
// ==> resURL = jar:ORIGINAL_URL!resName 
String path = resURL.getPath(); 
// ==> path = ORIGINAL_URL!resName 
URL jarURL = new URL(path.substring(0, path.indexOf('!')); 
// ==> jarURL = ORIGINAL_URL 

如果你能負擔得起創建則可以選擇做一個連接:

JarURLConnection conn = (JarURLConnection) resUrl.openConnection(); 
URL jarURL = conn.getJarFileURL(); 
相關問題