读取配置文件参数的几种方法
程序员文章站
2022-04-27 19:38:19
...
首先思考读取的要点是什么?一般都是以key/value形式存储在文件中通过key读取value,那么读取的时候文件路径是什么?可以配置多个文件路径读取所有的key/value对么?
1、基于输入流读取属性文件的Properties
该类继承Hashtable,将键值对存储在集合中。基于输入流从属性文件中读取键值对,load()方法调用完毕,就与输入流脱离关系,不会自动关闭输入流,需要手动关闭
代码示例:基于流读取需要文件的全路径
FileInputStream fis = new FileInputStream("D:\\workspace\\demo\\src\\main\\resources\\application.properties");
Properties props = new Properties();
props.load(fis);
2、基于类读取属性文件的ResourceBundle
该类基于类读取属性文件:将属性文件当作类,意味着属性文件必须放在包中,使用属性文件的全限定性类名而非路径指代属性文件。
代码示例:只需文件的包全限定路径而非文件夹路径
private static ResourceBundle resourceBundle;
static {
resourceBundle = ResourceBundle.getBundle("application", Locale.getDefault());
}
public static void main(String[] args) throws IOException {
String url = resourceBundle.getString("fn.token");
System.out.println(url);
}
3、基于@Value注解
有@Value(“${}”)和@Value(“#{}”)两种方式,区别如下:
第一种@Value("${}")读取的是配置文件中配置的基本属性,譬如常见的application.properties,示例如下:
${anotherfile.configinject}
private String inject;
第二种@Value("#{}"),#{ obj.property? :default_value },即Spel表达式对应的内容,default_value即为前者为空时的取值,obj代表对象,代码示例如下:
@Value("#{beanInject.another}")
private String fromAnotherBean; // 注入其他Bean属性:注入beanInject对象的属性another,类具体定义见下面
@Value("#{systemProperties['os.name']}")
private String systemPropertiesName; // 注入操作系统属性
@Value("#{ T(java.lang.Math).random() * 100.0 }")
private double randomNumber; //注入表达式结果
以上大概是常用到的几种形式,以后有其他形式继续更新。
上一篇: 俺发几个小笑话,哈。。。
下一篇: 俺传四个冷笑话