在Java中读取属性文件的最佳方法是什么?

3
我知道两种读取.properties文件的方法:
1- System.getProperties.load(输入.properties文件的Inputstream);
2- 创建一个新的Properties对象,然后调用load(输入.properties文件的Inputstream);
在第一种方法中,我们将会把.properties文件的值存储在System对象中。这会占用更多的资源吗?
想知道哪种方法是最好的,或者除了以上两种方法之外,是否还有其他更好的方法,请告诉我。
谢谢。
3个回答

9

取决于属性文件表示的内容。如果它表示需要覆盖/提供一些默认系统属性的系统属性,则采用第一种方法。但如果它表示应用程序特定属性(这通常是更常见的情况),则采用第二种方法。


完全同意。系统属性显然与系统有关,而其他任何内容都与应用程序有关。后者被总结为应用程序配置,类似于Apache配置项目http://commons.apache.org/configuration/howto_properties.html。另一种属性或ResourceBundle加载是为了国际化,仍然属于后者。 - hisdrewness

0

在我看来,将应用程序属性加载到系统属性对象中是一个糟糕的想法。如果有人将虚假的属性值放入你正在加载的文件中,这可能会导致各种晦涩的故障。例如,将“java.home”设置为虚假值将导致JavaMail失败,而设置其中一个“*.separator”属性可能会导致各种奇怪的行为。

如果您的应用程序确实需要“覆盖”系统属性,则最好这样做:

    Properties props = new Properties(System.getProperties());
    props.load(someInputStream);

如果不是这样的话,那么只需按以下方式加载属性即可:
    Properties props = new Properties();
    props.load(someInputStream);

如果出于某种原因您需要覆盖系统属性对象中的值,则应更加小心/有选择地进行操作。

0

我们将使用URL读取属性文件...

 Properties props = new Properties();
 try
 {
     java.net.URL url = Thread.currentThread().getContextClassLoader().getResource(fileName);
    java.net.URL url2 = ClassLoader.getSystemResource(fileName);
     props.load(url.openStream());
 }
 catch (FileNotFoundException e)
 {
     // TODO Auto-generated catch block
     e.printStackTrace();
 }
 catch (IOException e)
 {
     // TODO Auto-generated catch block
     e.printStackTrace();
 }
 return props;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接