欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

读取配置文件参数的几种方法

程序员文章站 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; //注入表达式结果

以上大概是常用到的几种形式,以后有其他形式继续更新。