|
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. |
|