Java 读取 .properties 配置文件的几种方式

没啥说的,直接上代码。

package com.iflytek.jtcn.service.impl;

import org.elasticsearch.client.Client;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;
import java.util.ResourceBundle;

public class PropertiesTest {

    public static void readProp1() throws Exception {
        Properties prop = new Properties();
        prop.load(new InputStreamReader(Client.class.getClassLoader().getResourceAsStream("application.properties"), "UTF-8"));
        String linuxIp = (String) prop.get("linux.ip");
        System.out.println("linuxIp:" + linuxIp);
    }

    /**
     * 基于ClassLoder读取配置文件
     * 注意:该方式只能读取类路径下的配置文件,有局限但是如果配置文件在类路径下比较方便。
     */
    public static void readProp2() throws Exception {
        Properties properties = new Properties();
        // 使用ClassLoader加载properties配置文件生成对应的输入流
        InputStream in = PropertiesTest.class.getClassLoader().getResourceAsStream("application.properties");
        // 使用properties对象加载输入流
        properties.load(in);
        //获取key对应的value值
        String linuxIp = properties.getProperty("linux.ip");
        System.out.println("linuxIp:" + linuxIp);
    }

    /**
     * 基于 InputStream 读取配置文件
     * 绝对路径
     * 注意:该方式的优点在于可以读取任意路径下的配置文件
     */
    public static void readProp3() throws Exception {
        Properties properties = new Properties();
        // 使用InPutStream流读取properties文件   //使用绝对路径
        BufferedReader bufferedReader = new BufferedReader(new FileReader("src/main/resources/application.properties"));
        properties.load(bufferedReader);
        // 获取key对应的value值
        String linuxIp = properties.getProperty("linux.ip");
        System.out.println("linuxIp:" + linuxIp);
    }


    /**
     * 通过 java.util.ResourceBundle 类来读取,这种方式比使用 Properties 要方便一些
     *
     * 通过 ResourceBundle.getBundle() 静态方法来获取(ResourceBundle是一个抽象类),
     *  这种方式来获取properties属性文件不需要加.properties后缀名,只需要文件名即可
     *
     * */
    public static void readProp4() {
        //application为属性文件名,如果是放在src下,直接用application即可,放在其他包路径下需要用绝对路径
        ResourceBundle resource = ResourceBundle.getBundle("application");
        String linuxIp = resource.getString("linux.ip");
        System.out.println("linuxIp:" + linuxIp);
    }


    public static void main(String[] args) throws Exception {
        //readProp1();
        //readProp2();
        //readProp3();
        readProp4();

    }

}

  

posted on 2020-09-02 11:42  shenhaha  阅读(513)  评论(0编辑  收藏  举报

有用的话麻烦点个推荐哈