使用资源文件分发Java应用程序的最佳方式(数据库连接参数,图像......)

时间:2018-05-08 15:19:55

标签: java jdbc launch4j

我想使用Java属性文件分发连接到外部数据库的Java应用程序。我的问题是,一旦我的项目作为Jar文件导出(然后使用Launch4j作为EXE导出)在不同于我项目的根文件夹的地方,与我的数据库的连接失败,我的大多数图片都没有加载。

关于连接,我尝试了几种方法来读取外部文件中写入的连接属性,该文件位于源文件夹中:

Project structure

代码:

Code reading the properties file with the connection parameters

我还尝试将属性文件放在项目的根文件夹中:两种方式在运行项目时都有效,但在启动jar或exe时失败。

首先我认为这只是因为我的项目的输出,可能由于一些错误的设置而失败。但我开始认为我可能对如何将资源导入Java项目有错误的理解,甚至认为我在Stackoverflow上关注了该主题的几个主题。

所以:

  • 以一种可以将它们导出到Jar / exe文件中的方式包含属性文件的最佳方法是什么?
  • 或者,在生成Jar之后是否应该包含这些文件,在生成exe时引用它们?怎么会这样?

由于连接文件包含一些敏感数据(即连接数据库的密码),我希望有一种官方方法可以在导出Jar / exe文件后保护该文件免受不必要的访问。

非常感谢您的帮助。 如果需要,我可以提供更多的代码和图片。

2 个答案:

答案 0 :(得分:0)

资源(在jar中)不是File(在文件系统上)。使用

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

conf位于/resources下的那个地方。

答案 1 :(得分:0)

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());
}