Получение пути к файловой системе класса

Есть ли способ определить текущее местоположение файловой системы исполняемого класса из кода этого класса во время выполнения, если оно выполнено с помощью команды java?

Например, для следующего класса:

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);
 }

}

Есть ли способ получить и напечатать правильный путь в файловой системе файла MyClass.class, только что вызывается?

Аналогично, если я вызываю jar файл из команды java -jar, есть ли способ получить путь к файлу jar изнутри классов внутри этого jar?

P.S.:Please, не делают никаких предположений о рабочем каталоге, из которого вызывается команда java!

Ответы

Ответ 1

Следующий фрагмент кода сделает это для вас:

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

замените MyClass на ваш main класс

Результирующий объект File f представляет файл .jar, который был выполнен. Вы можете использовать этот объект, чтобы заставить родителя найти каталог, в котором находится .jar.