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

Best way to distribute a Java app with resource files (DB connection parameters, images, ...)

我想分发一个 Java 应用程序,该应用程序使用 Java 属性文件连接到外部数据库。我的问题是,一旦我的项目作为 Jar 文件(然后使用 Launch4j 作为 EXE)导出到与我项目的根文件夹不同的位置,与我的数据库的连接就会失败并且我的大部分图片都不会加载。

仅就连接而言,我已经尝试了几种方法来读取写在外部文件中的连接属性,该文件位于源文件夹中:

代码:

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

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

所以 :

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

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

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

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

对于那个地方 conf/resources 下。

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