Как получить путь запуска 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

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



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

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

Jon Skeet

package foo;

public class Test
{
    public static void main(String[] args)
    {
        ClassLoader loader = Test.class.getClassLoader();
        System.out.println(loader.getResource("foo/Test.class"));
    }
}

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

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


erickson

URL main = Main.class.getResource("Main.class");
if (!"file".equalsIgnoreCase(main.getProtocol()))
  throw new IllegalStateException("Main class is not stored in a file.");
File path = new File(main.getPath());

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

4 ответа

Решение

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

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

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

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

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

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

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

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

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

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

    ClassLoader cl = ClassLoader.getSystemClassLoader();

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

    for(URL url: urls){
        System.out.println(url.getFile());
    }
Другие вопросы по тегам