Как получить путь к запуску java-программы

Есть ли способ получить путь основного класса работающей Java-программы.

структура

D:/
|---Project
       |------bin
       |------src

Я хочу получить путь как D:\Project\bin\.

Я пытался System.getProperty("java.class.path"); но проблема в том, если я бегу как

java -classpath D:\Project\bin;D:\Project\src\  Main

Output 
Getting : D:\Project\bin;D:\Project\src\
Want    : D:\Project\bin

Есть какой-либо способ сделать это?



===== РЕДАКТИРОВАТЬ =====

Здесь есть решение

  • Решение 1 (Джон Скит)

    пакет foo;

    открытый класс Test {public static void main (String [] args) {ClassLoader loader = Test.class.getClassLoader(); System.out.println(loader.getResource("foo/Test.class")); System.out.println(loader.getResource( "Foo/Test.class")); } } }}

Это распечатано:

file:/C:/Users/Jon/Test/foo/Test.class


  • Решение 2 (Эриксон)

    URL main = Main.class.getResource("Main.class"); if (! "file".equalsIgnoreCase(main.getProtocol())) выдает новое исключение IllegalStateException ("Главный класс не хранится в файле."); Путь к файлу = новый файл (main.getPath());

Обратите внимание, что большинство файлов классов собраны в файлы JAR, так что это не сработает в каждом случае (отсюда и IllegalStateException). Тем не менее, вы можете найти JAR, который содержит класс, с помощью этого метода, и вы можете получить содержимое файла класса, подставив вызов getResourceAsStream() вместо getResource(), и это сработает, если класс находится на файловая система или в JAR.

Ответ 1

Попробуйте этот код:

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

замените MyClass вашим классом, содержащим метод main.

В качестве альтернативы вы также можете использовать

System.getProperty("java.class.path")

Вышеупомянутое свойство системы обеспечивает

Путь, используемый для поиска каталогов и JAR-архивов, содержащих файлы классов. Элементы пути к классу разделяются символом, определяемым платформой, указанным в свойстве path.separator.

Ответ 2

Использование

System.getProperty("java.class.path")

см. http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html

Вы также можете легко разбить его на элементы

String classpath = System.getProperty("java.class.path");
String[] classpathEntries = classpath.split(File.pathSeparator);

Ответ 3

На самом деле вы не хотите, чтобы путь к вашему основному классу. В соответствии с вашим примером вы хотите получить текущий рабочий каталог, то есть каталог, в котором была запущена ваша программа. В этом случае вы можете просто сказать new File(".").getAbsolutePath()

Ответ 4

    ClassLoader cl = ClassLoader.getSystemClassLoader();

    URL[] urls = ((URLClassLoader)cl).getURLs();

    for(URL url: urls){
        System.out.println(url.getFile());
    }