我想使用Java属性文件分发连接到外部数据库的Java应用程序。我的问题是,一旦我的项目作为Jar文件导出(然后使用Launch4j作为EXE导出)在不同于我项目的根文件夹的地方,与我的数据库的连接失败,我的大多数图片都没有加载。
关于连接,我尝试了几种方法来读取外部文件中写入的连接属性,该文件位于源文件夹中:
代码:
我还尝试将属性文件放在项目的根文件夹中:两种方式在运行项目时都有效,但在启动jar或exe时失败。
首先我认为这只是因为我的项目的输出,可能由于一些错误的设置而失败。但我开始认为我可能对如何将资源导入Java项目有错误的理解,甚至认为我在Stackoverflow上关注了该主题的几个主题。
所以:
由于连接文件包含一些敏感数据(即连接数据库的密码),我希望有一种官方方法可以在导出Jar / exe文件后保护该文件免受不必要的访问。
非常感谢您的帮助。 如果需要,我可以提供更多的代码和图片。
答案 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());
}