我们常常需要将一些配置参数放置在XML 配置文件或者 properties 配置文件中,增强程序灵活性。我总结下读取 properties 配置文件的几种方法,供需要时使用。
- 假设我有一个config.properties文件:(键值对形式),现在需要读取出来
className=demo.Teacher
methodName=teach
方式一:properties类
public class propertiesTest{
public static void main(String[] args){
//(1)创建集合
Properties properties = new Properties();
//通过加载器获取输入流,读取config.properties文件
InputStream configStream = propertiesTest.class.getResourceAsStream("/config.properties");
//(2)流中内容载入集合
properties.load(configStream);
//获取集合中的键值对,类名
String classNameValue = properties.getProperty("className");//demo.Teacher
//获取集合中的键值对,方法名
String methodNameValue = properties.getProperty("methodName");//teach
}
}
注:我在网上看到有的博主说这个方法存在局限性,只能读取类路径下的配置文件。这个问题主要原因在于反射的时候,获取路径太死。我在之前的写一篇文章里已经解决了,有兴趣可以去了解一下
详见Class.getResourceAsStream和ClassLoader.getResourceAsStream方法使用的区别及总结
这样就使得properties类读取properties配置文件变得更加灵活了!
方式二:ResourceBundlele类
该方式是java.util包下自带的类,这种方式比使用 Properties 要方便一些,因为他通过静态方法来获取。
需要注意的是:ResourceBundle是一个抽象类,不能new对象
这种方式来获取properties属性文件不需要加.properties后缀名,只需要文件名即可
public class propertiesTest{
public static void main(String[] args){
//如果是放在src下,直接用config即可;不在src下,那就写清楚路径即可
ResourceBundle resource = ResourceBundle.getBundle("config");
//调用静态方法直接获得键值对中值
String classNameValue = =resource.getString("className");//demo.Teacher
String methodNameValue = =resource.getString("methodName");//teach
}
小结:
这两种方法都是读取properties文件的较好的方法,第一种稍微复杂点,第二种直接调用java写好的类来处理。
我总结下,自己需要的时候可以直接上来拿。也建议大家收藏下,以备不时之需,嘻嘻~