Obtener el directorio del jar donde está mi clase

3634 vistas

Veamos un trozo de código que permiter recuperar el directorio que contiene el fichero jar donde está la clase en curso.

Si la clase no está en un jar, el directorio será el que haya en el CLASSPATH.

Por ejemplo, si la clase es:
C:\sources\java\lang\Object.class

El directorio encontrado será:
C:\sources

Veamos el código:



java
  1.     String path = getClass().getName() + ".class";
  2.     URL url = getClass().getResource(path);
  3.     path = URLDecoder.decode(url.toString(), "UTF-8");
  4.     // quitamos la clase o el jar del path de la url
  5.     int index = path.lastIndexOf("/");
  6.     path = path.substring(0, index);
  7.     if (path.startsWith("jar:file:"))
  8.     {
  9.       // quitamos el jar:file: de la url de un jar
  10.       // asà como el path de la clase en el jar
  11.       index = path.indexOf("!");
  12.       path = path.substring(9, index);
  13.     }
  14.     else
  15.     {
  16.       path = path.substring(5, path.length());
  17.       Package pack = getClass().getPackage();
  18.       if (null != pack)
  19.       {
  20.         String packPath = pack.toString().replace('.', '/');
  21.         if (path.endsWith(packPath))
  22.         {
  23.           path = path.substring(0, (path.length() - packPath.length()));
  24.         }
  25.       }
  26.     }
  27.     System.out.println("Directorio que contiene la clase: " + path);



Nota: Para JDK inferior a 1.4 tendremos que usar URLDecoder.decode(String uneURL).

Nota2: para llamar este código desde un bloque static tendremos que cambiar getClass() por NombreDeLaClase.class.