JavaXT
|
|
How to Get the Physical Location of a JAR FileIn this tutorial, I will demonstrate how to find the jar file associated with a given class. In the past, I've used this information to debug class loaders, identify the version number of a given library, run apps found relative to a jar file, store configuration information, etc. Here's a simple command line app used to return the physical location of the jar file. Note the 2 getJarFile() methods. One is used to find the physical location given a "Class", while the other will return a location using an instance of a class. public class Test { public static void main(String[] args) throws Exception { System.out.println(getJarFile(Test.class)); } public static java.io.File getJarFile(Object obj) throws Exception { return getJarFile(obj.getClass()); } public static java.io.File getJarFile(Class _class) throws Exception { String path = _class.getPackage().getName().replace(".","/"); String url = _class.getClassLoader().getResource(path).toString(); url = url.replace(" ","%20"); java.net.URI uri = new java.net.URI(url); if (uri.getPath()==null){ path = uri.toString(); if (path.startsWith("jar:file:")){ //Update Path and Define Zipped File path = path.substring(path.indexOf("file:/")); path = path.substring(0,path.toLowerCase().indexOf(".jar")+4); if (path.startsWith("file://")){ //UNC Path path = "C:/" + path.substring(path.indexOf("file:/")+7); path = "/" + new java.net.URI(path).getPath(); } else{ path = new java.net.URI(path).getPath(); } return new java.io.File(path); } } else{ return new java.io.File(uri); } return null; } } Once you have the location of the jar file, you can parse it using the techniques described here: Note that these JAR utilities/functions and more are available in the javaxt.io.Jar class. |