Доступ к файлам свойств за пределами .jar? - программирование

Доступ к файлам свойств за пределами .jar?

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

То, что я хотел бы сделать, - это выполнить поиск в этом порядке:

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

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

4b9b3361

Ответ 1

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

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

CodeSource src = MyClass.class.getProtectionDomain().getCodeSource();
if (src != null) {
  URL url = new URL(src.getLocation(), "MyApp.properties");
  ...
} 
else {
  /* Fail... */
}

Ответ 2

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

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

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

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 не найден, если путь к классам (возможно, при работе в среде вашего dev).

Ответ 3

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

new File(".");

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

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