Есть ли способ получить путь основного класса работающей 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
Есть какой-либо способ сделать это?
===== РЕДАКТИРОВАТЬ =====
Здесь есть решение
-
пакет 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
-
URL main = Main.class.getResource("Main.class"); if (! "file".equalsIgnoreCase(main.getProtocol())) выдает новое исключение IllegalStateException ("Главный класс не хранится в файле."); Путь к файлу = новый файл (main.getPath());
Обратите внимание, что большинство файлов классов собраны в файлы JAR, так что это не сработает в каждом случае (отсюда и IllegalStateException
). Тем не менее, вы можете найти JAR, который содержит класс, с помощью этого метода, и вы можете получить содержимое файла класса, подставив вызов getResourceAsStream()
вместо getResource()
, и это сработает, если класс находится на файловая система или в JAR.