On 22/10/11 10:54, Philipp Kraus wrote:
String l_jarfile =
Class.forName("class_within_the_jar").getResource("").toString();
l_jarfile = l_jarfile.substring(9,
l_jarfile.lastIndexOf(".jar!")) + ".jar";
This does not work on MS Windows systems (unix and OSX work correct
with this code).
If the Jar files is stored under a path like "C:\Users\myuser\Java
Files\myjar.jar" (with a space)
the JarFile-Object can't locate the file, because the space within the
directory is changed to %20
Leaving aside the good questions of why, and whether these magic
constants are a good thing, I will address the decoding of % sequences:
Create a java.net.URI from the string, then create a java.io.File from
the URI.
import java.net.*;
import java.io.*;
public class GetPath {
public static void main(String[] args) throws Exception {
Class<?> clazz = Class.forName(args[0]);
URL clazzRes = clazz.getResource("");
String loc = clazzRes.toString();
System.out.println("Resource: " + loc);
URI stripped =
URI.create(loc.substring(4, loc.lastIndexOf(".jar!") + 4));
System.out.println("Stripped: " + stripped);
File result = new File(stripped);
System.out.println("Result: " + result);
}
}
Lots of result checking omitted.