Obtener la ruta del sistema de archivos de la clase que se está ejecutando

¿Hay alguna manera de determinar la ubicación actual del sistema de archivos de la clase ejecutada desde el código de esta clase, en tiempo de ejecución, dado que se ejecuta con el comando java ?

Por ejemplo para la siguiente clase:

 public class MyClass{ public static void main(String[] args){\ new MyClass().doStuff(); } private void doStufF(){ String path = ... // what to do here?! System.out.println("Path of class being invoked: " + path); } } 

¿Hay alguna forma de obtener e imprimir la ruta correcta en el sistema de archivos del archivo MyClass.class que se acaba de invocar?

De forma similar, si invoco el archivo jar desde el comando java -jar , ¿hay alguna manera de obtener una ruta de archivo jar dentro de las clases dentro de ese contenedor?

PD: ¡Por favor, no hagas suposiciones sobre el directorio de trabajo desde el que se invoca el comando java !

El siguiente fragmento de código hará esto por usted:

 final File f = new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath()); 

reemplace MyClass con su clase main

El objeto de File resultante f representa el archivo .jar que se ejecutó. Puede usar este objeto para que el padre encuentre el directorio en el que se encuentra .jar .