Isu*_*uru 7 java database executable-jar properties-file
我写了一个小应用程序.我已将数据库特定信息放在属性文件中.
db.url=jdbc:mysql://localhost:3306/librarydb
db.user=root
db.passwd=pas$w0rd
Run Code Online (Sandbox Code Playgroud)
当我构建应用程序以获取可执行jar文件时,属性文件包含在其中.将这些信息放在属性文件中的全部目的是允许用户更改这些信息,但这使得它变得不可能.
如何包含不包含jar文件的属性文件?有点像你在.NET应用程序中使用AppSettings文件.
我是Java的新手,所以如果你能把它分解为一系列步骤我会很感激.
谢谢.
编辑:
这就是我从程序中的属性文件中获取值的方法.
public class DatabaseHandler {
public static Connection connectToDb() {
Connection con = null;
Properties props = new Properties();
InputStream in = null;
try {
in = DatabaseHandler.class.getResourceAsStream("database.properties");
props.load(in);
in.close();
String url = props.getProperty("db.url");
String user = props.getProperty("db.user");
String password = props.getProperty("db.passwd");
con = DriverManager.getConnection(url, user, password);
} catch (Exception ex) {
Logger.getLogger(DatabaseHandler.class.getName()).log(Level.SEVERE, null, ex);
}
return con;
}
}
Run Code Online (Sandbox Code Playgroud)
你是对的.如果属性可由用户修改,那么将它们放在JAR中的属性文件中是行不通的
有几种方法:
您可以将属性放在存储在文件系统中的属性文件中.问题是搞清楚其中的文件系统来存储它们:
在UNIX/Linux上,存在用于存储系统范围和每用户配置属性的约定,但这些属性有点松散,并且处于一种不稳定的状态(例如,某些"桌面"框架具有其自己的偏好机制.
我相信Windows有类似的约定.
方法的问题可能是权限问题(您不希望一个用户更改另一个用户的首选项),甚至可能出现只读文件系统等问题.
如果要在文件系统中使用属性文件,将位置硬连接到代码中是个坏主意.通过命令行参数和/或可以使用该-D选项设置的"系统属性"使其可配置.
在Windows上,您可以将属性放入Windows注册表中.但是您需要使用第三方库来执行此操作.当然,这不是便携式的 - 它不适用于非Windows平台.
您可以使用Java Preferences API.这可以跨多个平台移植,但它是一个以Java为中心的解决方案; 即它不适合平台的"常规方式"做事.
简而言之,从各个方面来看都没有理想的解决方案.
但是,一旦确定了如何存储首选项,就可以编写应用程序,以便它使用JAR文件中的属性文件来提供默认或初始设置.