2012-03-27 68 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(); 
相关问题