使用资源文件(数据库连接参数、图像等)分发 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 之后包含这些文件,在生成 exe 时引用它们?那会怎样?
由于连接文件包含一些敏感数据(即连接到数据库的密码),我希望在导出 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());
}
我想分发一个 Java 应用程序,该应用程序使用 Java 属性文件连接到外部数据库。我的问题是,一旦我的项目作为 Jar 文件(然后使用 Launch4j 作为 EXE)导出到与我项目的根文件夹不同的位置,与我的数据库的连接就会失败并且我的大部分图片都不会加载。
仅就连接而言,我已经尝试了几种方法来读取写在外部文件中的连接属性,该文件位于源文件夹中:
代码:
我还尝试让 属性 文件位于我的项目的根文件夹中:当 运行 项目时两种方式都有效,但在启动 jar 或 exe 时失败。
一开始我以为是因为我的项目导出失败,可能是设置错误导致的。但我开始认为我可能对如何将资源导入 Java 项目有错误的理解,甚至认为我在 Whosebug 上关注了关于该主题的几个主题。
所以 :
- 以一种可以将属性文件导出到 Jar/exe 文件的方式包含属性文件的最佳方法是什么?
- 或者,是否应该在生成 Jar 之后包含这些文件,在生成 exe 时引用它们?那会怎样?
由于连接文件包含一些敏感数据(即连接到数据库的密码),我希望在导出 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());
}