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

如何在java代码中读取配置文件

程序员文章站 2022-05-17 23:04:49
...

在日常开发过程中,我们经常需要拼接一些字符串之类的东西,而这些字符串往往是不变的,或者在java代码中多次使用到的。当然我们可以在java代码中写死,但是这样做的缺点也是有目共睹的,一旦业务需求发生变化,去修改内容的时候就得频繁的去改java代码。那我们可不可以换一种方式呢,答案是肯定的,我们可以将这些常量配置到配置文件中去,然后需要这些常量的地方直接去配置文件中读取就行了,以后业务需求改变直接更改配置文件就行了。

 

我们举个案例来说明如何在java代码中读取配置文件中的内容,我们使用到了Java.util.Properties;

  1. 创建一个配置文件:student.properties,我们将此配置文件放在config文件夹下。
##学生信息配置文件
student.address.info = {0}的家庭地址为:{1},距离学校{2}公里。
student.grades.info = 语文成绩:{0},数学成绩:{1},英语成绩:{2}。
student.hobby.info = 喜欢{0}与{1},不喜欢{2}。

观察上面的配置文件,最上面一行为注释内容,不会对配置文件产生影响,下面三行为我们需要用到的字符串模板,那代码中的{0},{1},{2}..又代表什么意思呢?其实这里的{0},{1},{2}代表着通配占位符。举个例子,我们在java代码中读取了第二行的那个条字符串模板,我们再给这个模板一个字符串数组,假如:{“小花”,“东方小区”,“10”},输出这条语句的结果就是:小花的家庭地址为东方小区,距离学校10公里。系统会根据数组的索引顺序将字符串进行填充。

 

2.创建一个测试类,PropertiesTest.java

package com.zhexinit.odo.mail;

import org.springframework.core.io.ClassPathResource;

import java.io.IOException;
import java.io.InputStreamReader;
import java.text.MessageFormat;
import java.util.Properties;

public class PropertiesTest {

    //读取配置文件
    public static Properties prop = null;

    public static void main(String args[]){

        if(prop == null){
            prop = new Properties();
            try {
                ClassPathResource classPathResource = new ClassPathResource("config/studentInfo.properties");   //这里的填写的参数是配置文件的相对路径
                prop.load(new InputStreamReader(classPathResource.getInputStream(),"gbk"));     //文件流的编码方式
            }catch (IOException e){
                e.printStackTrace();
            }
        }

        String[] addressInfo = {"小明","东方小区","5.35"};
        String[] gradesInfo = {"88","92.5","97"};
        String[] hobbyInfo = {"跳远","跑步","散步"};

        System.out.println("地址信息:" + MessageFormat.format(prop.getProperty("student.address.info"),addressInfo));
        System.out.println("成绩信息:" + MessageFormat.format(prop.getProperty("student.grades.info"),gradesInfo));
        System.out.println("爱好信息:" + MessageFormat.format(prop.getProperty("student.hobby.info"),hobbyInfo));
    }
}

重要的注释我已经贴在代码上了,大家可以理解一下。

测试输出结果如下:

如何在java代码中读取配置文件

强调:数组中元素的索引位置与配置文件中模板需要替换的文本的索引位置是一一对应的。

但是你可能会问一个问题,这种配置文件中的值都是常量,都是固定不变的,那如果配置文件中的value是个变量,那怎么取到这个变量呢?

例如,有这样一条KEY-VALUE的值:spring.profile=${profile},我们如何取到${profile}的值呢?

亲自实践的值,getProperty只能取到VALUE为常量的值,而变量的值是无法取到的,最终的打印调试结果也是字符串“${profile}”

像以上这种VALUE是变量的,我们一般都需要配置启动参数的,那这个启动参数我们可以通过System.getProperty("profile")获取。

启动参数的配置如下图:

如何在java代码中读取配置文件

记得前缀加个:-D

这样,获取变量VALUE值我们就可以通过System.getProperty("profile")取到了,打印一下。结果为:dev

关于变量的取值参考这篇文章:

http://www.cnblogs.com/yangmingke/p/6058898.html

至此,java读取配置文件的教程就结束啦,很简单,常量或者需要替换的模板写在配置文件中而不是在代码中写死,这也是种良好的编码习惯。