Лучший способ распространения приложения Java с файлами ресурсов (параметры подключения к БД, изображения, ...) - PullRequest
0 голосов
/ 08 мая 2018

Я хочу распространять приложение Java, которое подключается к внешней базе данных, используя файл свойств Java. Моя проблема заключается в том, что, как только мой проект экспортируется в виде файла Jar (а затем в виде EXE-файла с использованием Launch4j) в другом месте, чем корневая папка моего проекта, происходит сбой подключения к моей базе данных, и большинство моих изображений не загружаются.

Что касается только соединения, я попробовал несколько вещей, чтобы прочитать свойства соединения, записанные во внешнем файле, который находится в исходной папке:

Project structure

код:

Code reading the properties file with the connection parameters

Я также попытался поместить файл свойств в корневую папку моего проекта: оба способа работают при запуске проекта, но не запускаются при запуске jar или exe.

Сначала я подумал, что это просто из-за экспорта моего проекта, который, возможно, потерпел неудачу из-за неправильных настроек. Но я начинаю думать, что у меня может быть неправильное понимание того, как импортировать ресурсы в проект Java, даже если я подумал, что следил за несколькими темами на эту тему в Stackoverflow.

Итак:

  • Как лучше всего включить файлы свойств таким образом, чтобы можно было экспортировать их в файл Jar / exe?
  • Или эти файлы должны быть включены после генерации Jar, путем ссылки на них при создании exe-файла? Как бы это было?

Поскольку файл подключения содержит некоторые важные данные (например, пароль для подключения к базе данных), я надеялся, что существует официальный способ защитить этот файл от нежелательного доступа после экспорта файла Jar / exe.

Большое спасибо за помощь. Я могу предоставить больше кода и изображений, если это необходимо.

Ответы [ 2 ]

0 голосов
/ 08 мая 2018
String configFile = "conf/connexion.properties";
InputStream inputStream = this.class.getClassLoader().getResourceAsStream(configFile);
Properties props = new java.util.Properties();
if (inputStream  != null) {
    props.load(in);
}else{
    System.out.println("File not found");
}

(или)

Properties prop = new Properties();
URL url = ClassLoader.getSystemResource("/conf/connexion.properties");
if (url != null)
     prop.load(url.openStream());
}
0 голосов
/ 08 мая 2018

Ресурсы (как в банке) не являются Файлами (в файловой системе). Используйте

getClass().getResourceAsStream("/conf/connexxion.properties");`

Для этого места conf под /resources.

...