2010-03-01 3 views
2

Как мне получить путь к исполняемому файлу .jar в Java?Как получить путь к исполняемому файлу .jar?

Я пробовал использовать System.getProperty("user.dir");, но это только дало мне текущий рабочий каталог, который является неправильным, мне нужен путь к каталогу, в котором находится .jar-файл, а не «pwd».

+0

Откуда? Внутри самого файла JAR? – BalusC

+0

Да, из кода внутри самого файла JAR. – Zolomon

ответ

2

Не могли бы вы указать, почему вам нужен путь?
Если вам нужно получить доступ к некоторому свойству из файла jar, вы должны взглянуть на ClassLoader.getSystemClassLoader();
не забывайте, что ваши классы не обязательно хранятся в файле jar.


// if your config.ini file is in the com package. 
URL url = getClass().getClassLoader().getResource("com/config.ini"); 
System.out.println("URL=" + url); 

InputStream is = getClass().getClassLoader().getResourceAsStream("com/config.ini"); 
try { 
    if (is != null) { 
     BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
     String line; 
     while ((line = br.readLine()) != null) { 
      System.out.println(line); 
     } 
    } 
    else { 
     System.out.println("resource not found."); 
    } 
} 
catch (IOException e) { 
    e.printStackTrace(); 
} 

Отношения.

+0

Необходимо получить доступ к файлу config.ini, который хранится в том же каталоге, что и файл .jar. – Zolomon

+0

Посмотрите на ClassLoader # getResource/#findResource. – elou

+0

не уверен, может ли он работать, если файл конфигурации является внешним по отношению к банке. – PhiLho

0

Взятые От Java-Forumns:

 public static String getPathToJarfileDir(Object classToUse) { 
     String url = classToUse.getClass().getResource("/" + classToUse.getClass().getName().replaceAll("\\.", "/") + ".class").toString(); 
     url = url.substring(4).replaceFirst("/[^/]+\\.jar!.*$", "/"); 
     try { 
      File dir = new File(new URL(url).toURI()); 
      url = dir.getAbsolutePath(); 
     } catch (MalformedURLException mue) { 
      url = null; 
     } catch (URISyntaxException ue) { 
      url = null; 
     } 
     return url; 
     } 
+0

Это не работает, возвращает путь к JRE при использовании в соответствии с инструкциями. Спасибо хоть! – Zolomon

0

Возможно java.class.path недвижимость?

Если вы знаете имя своего файла jar, и если оно находится в пути к классу, вы можете найти его путь туда, например. с небольшим регулярным выражением.

Смежные вопросы