Подтвердить что ты не робот

Смутно о местоположении файла свойств Java

У меня есть простой Java-проект со структурой:

package com.abc: a.java b.java c.properties

У меня есть параметры конфигурации базы данных, настроенные в файле c.properties. Внутри a.java и b.java я загружаю файлы свойств, используя:

Properties p = new Properties();
InputStream in = this.getClass().getResourceAsStream("c.properties");
p.load(in);

Это прекрасно работает. Но главный вопрос заключается в том, что, как только я подготовлю исполняемый банку, экспортируя этот код, файл свойств также будет упакован в файл jar. Если кто-то хочет изменить файл свойств для другой конфигурации базы данных, как он может это сделать? Должен ли я хранить файл свойств в некотором фиксированном месте на локальном компьютере. например "C:/". Затем дайте банку вместе с файлом свойств другому человеку. Затем ему нужно скопировать файл свойств внутри C:/location? Также еще один вопрос, как я могу сделать это местоположение общим для окон и Linux-машин?

4b9b3361

Ответ 1

Типичным способом обработки этого является загрузка базовых свойств из встроенного файла и возможность пользователям приложения указать дополнительный файл с переопределениями. Некоторые псевдокоды:

Properties p = new Properties();
InputStream in = this.getClass().getResourceAsStream("c.properties");
p.load(in);

String externalFileName = System.getProperty("app.properties");
InputStream fin = new FileInputStream(new File(externalFileName));
p.load(fin);

Ваша программа будет вызвана примерно так:

java -jar app.jar -Dapp.properties="/path/to/custom/app.properties"

Ответ 2

Сначала сохраните свойства по умолчанию в вашем файле свойств, который будет упакован в банку. Когда приложение запускает попытку чтения одного и того же файла свойств по умолчанию из некоторого местоположения по умолчанию в файловой системе, предпочитайте домашнюю папку пользователя, которую вы можете получить с помощью System.getProperty("user.home");. Если файл существует в файловой системе, загрузите его, если он не существует, загрузите файл упакованных свойств и напишите копию в файловую систему.

Итак, если ваше имя файла свойств myprops.properties, изначально только ваш файл jar будет содержать его. Когда приложение запустится, он проверяет наличие файла /home/xyz/myprops.properties. Так как это не так, он прочитает файл упакованных свойств и напишет копию в файл /home/xyz/myprops.properties. В следующий раз он будет читать от /home/xyz/myprops.properties.

Ответ 3

Почему бы не передать местоположение файла свойств в качестве аргумента командной строки (после флага)? если он отсутствует, то используйте файл по умолчанию в файле jar.