Доступ к файлам свойств за пределами .jar?
У меня есть файл .jar, который я собираю. Я хочу создать действительно простой файл .properties с настраиваемыми вещами, такими как имя пользователя и другие материалы, чтобы они могли редактировать вручную, а не включать графический редактор.
То, что я хотел бы сделать, - это выполнить поиск в этом порядке:
- указанный файл свойств (
args[0]
)
- MyApp.properties в текущем каталоге (каталог, из которого была вызвана Java)
- MyApp.properties в каталоге пользователя (свойство user.home?)
- MyApp.properties в каталоге, в котором хранится приложение .jar.
Я знаю, как получить доступ к # 1 и № 3 (я думаю), но как я могу определить во время выполнения # 2 и # 4?
Ответы
Ответ 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");