Le bout de code suivant permet de retrouver le répertoire contenant le fichier jar où est la classe courante.
Si la classe n'est pas dans un jar, le répertoire sera celui présent dans le CLASSPATH.
Par exemple si la classe est:
C:\sources\java\lang\Object.class
Le répertoire trouvé sera:
C:\sources
Voici le code pour réaliser ça:
String path = getClass().getName() + ".class";
URL url = getClass().getResource(path);
path = URLDecoder.decode(url.toString(), "UTF-8");
int index = path.lastIndexOf("/");
path = path.substring(0, index);
if (path.startsWith("jar:file:"))
{
index = path.indexOf("!");
path = path.substring(9, index);
}
else
{
path = path.substring(5, path.length());
Package pack = getClass().getPackage();
if (null != pack)
{
String packPath = pack.toString().replace('.', '/');
if (path.endsWith(packPath))
{
path = path.substring(0, (path.length() - packPath.length()));
}
}
}
System.out.println("Répertoire contenant la classe: " + path);
NB : Pour un JDK inférieur au 1.4 il faut utiliser URLDecoder.decode(String uneURL).
NB2 : Pour appeler ce code depuis un bloc static il faut remplacer getClass() par NomDeLaClasse.class.
|