Best way to read properties file in java?

2020-02-29 11:09发布

I am aware of two ways to read a .properties file:

1- System.getProperties.load(Inputstream for .properties file);

2- Creating a new Properties object and then calling load(Inputstream for .properties file);

In first approach, are we going to store values of .properties file in the System object. Is it utilizing more resources?

Would like to know which is the best way to do it or apart from above two ways, if there is any other best way, please let me know.

Thanks.

3条回答
做自己的国王
2楼-- · 2020-02-29 11:46

Depends on what the properties file represents. If it represents system properties which needs to override/supply some default system properties, then go for the first approach. But if it represents application-specific properties (which is more often the usual case), then go for the second approach.

查看更多
爷、活的狠高调
3楼-- · 2020-02-29 11:48

IMO, it is a BAD idea to load application properties into the System properties object. If someone puts bogus property values into the file you are loading, this could cause all sorts of obscure failures. For example, setting "java.home" to a bogus value will cause JavaMail to fail, and setting one of the "*.separator" properties could cause all sorts of things to behave strangely.

If your application really needs to "overlay" the system properties, then it would be better to do this:

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

If it doesn't, then just load the Properties as follows:

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

If for some reason you need to override values in the System Properties object itself, then you should do it much more carefully / selectively.

查看更多
别忘想泡老子
4楼-- · 2020-02-29 11:53

we will read properties files using the 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;
查看更多
登录 后发表回答