![](/img/trans.png)
[英]Android Library : Include properties file within a distributable JAR file
[英]Include A Properties File With A Jar File
我寫了一個小應用程序。 我已將數據庫特定信息放在屬性文件中。
db.url=jdbc:mysql://localhost:3306/librarydb
db.user=root
db.passwd=pas$w0rd
當我構建應用程序以獲取可執行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;
}
}
你是對的。 如果屬性可由用戶修改,那么將它們放在JAR中的屬性文件中是行不通的
有幾種方法:
您可以將屬性放在存儲在文件系統中的屬性文件中。 問題是搞清楚在文件系統來存儲它們:
在UNIX / Linux上,存在用於存儲系統范圍和每用戶配置屬性的約定,但這些屬性有點松散,並且處於一種不穩定的狀態(例如,某些“桌面”框架具有其自己的偏好機制。
我相信Windows有類似的約定。
方法的問題可能是權限問題(您不希望一個用戶更改另一個用戶的首選項),甚至可能出現只讀文件系統等問題。
如果要在文件系統中使用屬性文件,將位置硬連接到代碼中是個壞主意。 通過命令行參數和/或可以使用-D
選項設置的“系統屬性”使其可配置。
在Windows上,您可以將屬性放入Windows注冊表中。 但是您需要使用第三方庫來執行此操作。 當然, 這不是便攜式的 - 它不適用於非Windows平台。
您可以使用Java Preferences API 。 這可以跨多個平台移植,但它是一個以Java為中心的解決方案; 即它不適合平台的“常規方式”做事。
簡而言之,從各個方面來看都沒有理想的解決方案。
但是,一旦確定了如何存儲首選項, 就可以編寫應用程序,以便它使用JAR文件中的屬性文件來提供默認或初始設置。
您可以從類路徑加載屬性文件。 這使您可以將屬性文件捆綁在jar中,也可以在jar 外部 。 它只需要在正在運行的應用程序的類路徑上。
您可以通過以下方式執行此操作:
Properties props = new Properties();
InputStream inputStream = this.getClass().getClassLoader()
.getResourceAsStream(propFileName);
props.load(inputStream);
代替
in = DatabaseHandler.class.getResourceAsStream("database.properties");
嘗試
in = DatabaseHandler.class.getResourceAsStream("/database.properties");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.