Как получить путь к запуску 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
Есть какой-либо способ сделать это?
===== РЕДАКТИРОВАТЬ =====
Здесь есть решение
Это распечатано:
file:/C:/Users/Jon/Test/foo/Test.class
Обратите внимание, что большинство файлов классов собраны в файлы 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());
}