2010-01-20 80 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