2010-01-20 37 views
2

在Java中存儲和加載應用程序級屬性的最佳方式是什麼?在Java桌面應用程序中加載應用程序屬性

有什麼simulare到.NET,我只想把東西在App.config

<appSettings> 
    <add key="emailAddress" value="[email protected]" /> 
    </appSettings> 

,然後檢索它像這樣:

string AdminEmail = ConfigurationManager.AppSettings["emailAddress"]; 

我必須加載屬性文件成文件流等?似乎是不必要的工作。

我已經試過這樣:

Properties props = new Properties(); 

FileInputStream fis = new FileInputStream("myProps.properties"); 
props.load(fis); 
fis.close(); 

但是,這是給我一個java.io.FileNotFoundException異常。屬性文件需要與類相關的地方在哪裏?

回答

0

在這種情況下,它將查找的文件路徑與您開始使用Java應用程序的位置有關。這不是主要類或jar文件的位置,而是您從哪裏調用Java的地方。如果您使用調用Java的腳本啓動應用程序,那麼它就是該目錄。

舉例來說,您的應用程序捆綁在jar文件「app.jar」中。把'myProps.properties'放在同一個目錄下並從該目錄運行'java -jar app.jar'。它應該以這種方式找到你的屬性文件。

1

通常情況下,它會嘗試從應用程序的當前目錄加載,該目錄根據您的運行方式而有所不同。你應該能夠做在運行時確定這一點:

String currentFolder = System.getProperty("user.dir"); 
2

如果你使用一個FileInputStream這樣,你的路徑是相對於操作系統,這通常是啓動目錄的當前目錄。

如果您改爲使用Java中內置的資源機制(如描述in the API,getResourceAsStream()等),則路徑將相對於您的類的位置。通過這種方法,您還可以從罐內甚至通過網絡加載資源(例如Applets)。所使用的概念是一種虛擬文件系統,在Java術語中稱爲'classpath'。有一篇文章更詳細地報道了它的一個小組。

總之,這種代碼工作得很好:

Properties prop = new Properties(); 
//with properties in the same dir as current class 
prop.load(getClass().getResourceAsStream("my.properties")); 
//with properties in the root dir of your jar, or in base of classpath 
prop.load(getClass().getResourceAsStream("/my.properties")); 

您將需要添加的錯誤處理...

0

您可以使用屬性與資源包。我在應用程序中使用它來存儲不同語言的標籤,按鈕和消息

首先創建屬性文件,如test.properties。 It's一個文本文件,裏面你把你的信息是這樣的:

propertyname=value 

在你的情況

[email protected] 
[email protected] 

等等...

要在代碼中獲取此屬性,請使用屬性文件的名稱創建一個ResourceBundle對象以調用屬性。

ResourceBundle rb = ResourceBundle.getBundle("test"); 

爲了得到一個屬性的特定值的文件,只需調用資源包

String value = rb.getString("emailAddress"); 

這樣,名爲字符串值包含了一個名爲「EMAILADDRESS」屬性的值,位於測試的.properties文件

String value2 = rb.getString("email2"); 

同樣,名爲字符串值2包含了一個名爲「EMAIL2」屬性的值,地處test.properties文件

4

Preferences API提供此功能。它有許多瑕疵,但是如果您希望以與操作系統無關的方式進行操作,則這是使用標準Java運行時庫完成此操作的唯一方法。您當然可以始終編寫自己的操作系統特定代碼以滿足您的需求。是的,您可以編寫簡單的代碼來加載屬性文件,但該文件的位置可能會成爲跨多個操作系統的問題。我假設你正在用Java寫一個桌面應用程序,你關心操作系統的可移植性。否則,Java可能不是桌面應用程序的最佳選擇。

0

如果不指定絕對路徑,則選擇的是當前路徑。

這不完全是你問的,但如果你想使用XML文件作爲配置,你可以看看Apache Commons Configuration