在java中读取属性文件的最佳方法?

时间:2011-03-25 04:28:05

标签: java file properties

我知道有两种方法可以读取.properties文件:

1- System.getProperties.load(.properties文件的输入流);

2-创建一个新的Properties对象,然后调用load(.streamperties文件的Inputstream);

在第一种方法中,我们是否要在System对象中存储.properties文件的值。它是否在利用更多资源?

想知道哪种方式最好,或者除了上述两种方式之外,如果还有其他最佳方法,请告诉我。

感谢。

3 个答案:

答案 0 :(得分:9)

取决于属性文件代表什么。如果它表示需要覆盖/提供某些默认系统属性的系统属性,那么请转到第一种方法。但如果它代表特定于应用程序的属性(通常情况下通常是这种情况),那么请选择第二种方法。

答案 1 :(得分:0)

IMO,将应用程序属性加载到System属性对象中是一个不错的想法。如果有人将伪造的属性值放入您正在加载的文件中,这可能会导致各种模糊的失败。例如,将“java.home”设置为伪造值将导致JavaMail失败,并且设置其中一个“* .separator”属性可能会导致各种异常行为。

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

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

如果没有,则只需按如下方式加载属性:

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

如果由于某种原因你需要覆盖系统属性对象本身的值,那么你应该更仔细/更有选择地做。

答案 2 :(得分: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;