Доступ к файлам свойств вне .jar? - PullRequest
14 голосов
/ 22 апреля 2009

У меня есть файл .jar, который я собираю. Я хочу создать действительно очень простой файл .properties с настраиваемыми параметрами, такими как имя пользователя и другие элементы, чтобы они могли редактироваться вручную, а не включать редактор GUI.

Что я хотел бы сделать, так это уметь искать в следующем порядке:

  1. указанный файл свойств (args[0])
  2. MyApp.properties в текущем каталоге (каталог, из которого была вызвана Java)
  3. MyApp.properties в каталоге пользователя (системное свойство user.home ?)
  4. MyApp.properties в каталоге, где хранится приложение .jar

Я знаю, как получить доступ к № 1 и № 3 (я думаю), но как я могу определить во время выполнения № 2 и № 4?

Ответы [ 3 ]

10 голосов
/ 22 апреля 2009

Для 4 вы можете попробовать это. Получить путь к классу:

String classpath = System.getProperty("java.class.path");

Затем найдите в нем имя вашего приложения jar:

int jarPos = classpath.indexOf("application.jar");

Разобрать путь, ведущий к нему:

int jarPathPos = classpath.lastIndexOf(File.pathSeparatorChar, jarPos) + 1;
String path = classpath.substring(jarPathPos, jarPos);

Затем добавьте MyApp.properties. Обязательно проверьте jarPos == -1, что означает, что jar не найден, если classpath (возможно, при работе в вашей среде разработки).

6 голосов
/ 22 апреля 2009

# 2 - системное свойство "user.dir" . # 3 - это свойство "user.home".

# 4 - это нечто вроде клуджа, независимо от того, как вы к нему подходите. Вот альтернативный метод, который работает, если у вас есть класс, загруженный из JAR, который не находится в системном classpath.

CodeSource src = MyClass.class.getProtectionDomain().getCodeSource();
if (src != null) {
  URL url = new URL(src.getLocation(), "MyApp.properties");
  ...
} 
else {
  /* Fail... */
}
6 голосов
/ 22 апреля 2009

Для текущего рабочего каталога:

new File(".");

Для файла с именем MyApp.properties в текущем каталоге:

new File(new File("."), "MyApp.properties");
...