У меня есть файл JAR, в котором весь мой код заархивирован для запуска. Мне нужно получить доступ к файлу свойств, который необходимо изменить / отредактировать перед каждым запуском. Я хочу сохранить файл свойств в том же каталоге, где находится файл JAR. Есть ли способ сообщить Java, что нужно забрать файл свойств из этого каталога?
Примечание. Я не хочу хранить файл свойств в домашнем каталоге или передавать путь к файлу свойств в аргументе командной строки.
java
properties
Нил
источник
источник
user.home
. При проверке файла сначала проверьте наличие измененный файл в файловой системе, и если он не существует, загрузить файл по умолчанию ». Кстати, «Я не хочу ..» То, что вы хотите, менее важно, чем то, что работает и практично. Хранение приложения. как Oracle, так и MS (и, возможно, другие) настоятельно не рекомендуют настройки в каталоге приложения.Ответы:
Итак, вы хотите обрабатывать свой
.properties
файл в той же папке, что и основной / работающий jar, как файл, а не как ресурс основного / работающего jar. В этом случае мое собственное решение выглядит следующим образом:Первым делом: архитектура вашего программного файла должна быть такой (при условии, что ваша основная программа - это main.jar, а ее файл основных свойств - main.properties):
В этой архитектуре вы можете изменить любое свойство в файле main.properties с помощью любого текстового редактора до или во время работы main.jar (в зависимости от текущего состояния программы), поскольку это просто текстовый файл. Например, ваш файл main.properties может содержать:
Итак, когда вы запускаете свою основную программу из ее корневой / базовой папки, обычно вы запускаете ее следующим образом:
или сразу:
В вашем main.jar вам нужно создать несколько служебных методов для каждого свойства, найденного в вашем файле main.properties; скажем,
app.version
свойство будет иметьgetAppVersion()
следующий метод:В любой части основной программы, которая нуждается в
app.version
значении, мы вызываем ее метод следующим образом:источник
./
корневой папке (на том же уровне каталога), что и то, что я описал в архитектуре организации файлов. (в соответствии с требованиями оригинального плаката)java -jar build/main.jar
, вам нужно также поместить файл свойств вbuild
папку, чтобы он находился на том же уровне каталога, что и jar.java -jar path/to/jar/file
. Но я нашел решение в другом вопросе:String path = ClassLoader.getSystemClassLoader().getResource(".").getPath() + "/main.properties";
Я сделал это другим способом.
источник
Всегда есть проблема с доступом к файлам в вашем файловом каталоге из файла jar. Предоставление пути к классам в файле jar очень ограничено. Вместо этого попробуйте использовать файл bat или файл sh для запуска вашей программы. Таким образом, вы можете указать свой путь к классам в любом случае, ссылаясь на любую папку в любом месте системы.
Также проверьте мой ответ на этот вопрос:
создание файла .exe для проекта Java, содержащего sqlite
источник
У меня похожий случай: я хочу, чтобы мой
*.jar
файл имел доступ к файлу в каталоге рядом с указанным*.jar
файлом. См. Также ЭТОТ ОТВЕТ .Моя файловая структура:
Я могу загрузить файл (скажем
some.txt
) в InputStream внутри*.jar
файла с помощью следующего:Тогда делайте все, что хотите, с
stream
источник
У меня есть пример использования как пути к классам, так и внешней конфигурации с помощью log4j2.properties
источник
У меня это работает. Загрузите файл свойств из
current directory
Убедитесь, что
java.properties
это файлcurrent directory
. Вы можете просто написать небольшой сценарий запуска, который переключается в правильный каталог раньше, напримерВ вашем проекте просто поместите
java.properties
файл в корень вашего проекта, чтобы этот код работал и в вашей среде IDE.источник
Здесь, если вы упомянули
.getPath()
, это вернет путь к Jar, и я думаю, вам понадобится его родительский элемент, чтобы ссылаться на все другие файлы конфигурации, размещенные с jar. Этот код работает в Windows. Добавьте код в основной класс.источник