Есть несколько подходов, которые вы можете сделать, и это будет зависеть от того, где вы хотите разместить этот внешний файл.Ради этого ответа я буду ссылаться на этот файл как файл конфигурации
Не в том же каталоге
Первый подход заключается в том, где вам нужно будет разместить этот файл.файл вне JAR и не обязательно рядом с файлом JAR в том же каталоге.В этом случае вы можете передать местоположение файла config * , используя либо переменную окружения (например, если вы запускаете JAR в оболочке), либо свойство Java.
Чтобы использовать переменную окружения, предполагая, что вы используете какой-то дистрибутив Linux, вы можете использовать команду export для установки значения;что-то вроде этого:
$ export CONFIG_FILE_LOC=/etc/myapp/config.file
Затем вы можете прочитать значение в своем коде, используя класс System
, используя следующий код:
String fileLocationEnv = System.getenv("CONFIG_FILE_LOC");
В качестве альтернативы, вы можете установить это каксвойство, добавив следующий сегмент в команду запуска:
$ java -Dconfig.file.location=/etc/myapp/config.file -jar myapp.jar
Затем вы можете прочитать значение в своем коде, используя класс System
для свойств, используя следующий код:
String fileLocationProp = System.getProperty("config.file.location");
В том же каталоге
Если вам требуется, чтобы файл конфигурации сосуществовал в том же каталоге, что и ваш JAR-файл, то вы можете использовать следующий код для получения каталога JAR изатем добавьте к нему имя файла.Вот код (предполагая, что класс с именем MyApp
)
try{
new File(MyApp.class.getProtectionDomain().getCodeSource().getLocation().toURI());
} catch(URISyntaxException exception){
System.out.println("Exception");
}
Надеюсь, что это поможет.