ResourceBundle读取properties文件

ResourceBundle读取properties文件

集成开发工具:IDEA

下面是一个名为db.properties的文件的内容

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db?useSSL=true&useUnicode=true&characterEncoding=utf8
username=root
password=pwd

Java中可以使用 java.util 包下的 ResourceBundle 读取这个文件,读取的方法很简单:

一、得到关于这个配置文件的ResourceBundle对象

二、使用ResourceBundle类的 getString(key) 方法读取信息

ResourceBundle对象的获取

1、使用 ResourceBundle.getBundle() 方法,就像下面这样

ResourceBundle db = ResourceBundle.getBundle("db");

使用这种方式,getBundle() 的参数不需要带路径,也不需要带扩展名,但是 db.properties 文件必须在被标记为Resource Root的文件夹之下

2、使用 new PropertyResourceBundle() ,构造器的参数可以是一个 InputStream 或一个 Reader ,例如下面这样:

//filepath指db.properties的文件路径,可以是相对路径,也可以是绝对路径
InputStream in = new FileInputStream(filepath);
ResourceBundle db = new PropertyResourceBundle(in);

或者这样:

FileReader reader = new FileReader(filepath);
ResourceBundle db = new PropertyResourceBundle(reader);

甚至这样:

BufferedReader reader = new BufferedReader(new FileReader(filepath));
ResourceBundle db = new PropertyResourceBundle(reader);

使用这种方式,filepath 没有任何限制,可以在文件系统的任何位置,如果filepath不在当前项目下,则必须使用绝对路径,否则可以使用相对路径,相对路径以当前项目位置为根目录,可以不以 / 开头(以 / 开头也没有问题),

信息的读取

获得 ResourceBundle 对象之后,就可以读取db.properties 中的信息了,例如下面这样:

System.out.println(db.getString("driver"));
System.out.println(db.getString("url"));
System.out.println(db.getString("username"));
System.out.println(db.getString("password"));

附上完整的测试用例:

import org.junit.Test;
import java.io.*;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;

public class Main {
    @Test
    public void getResource() {
        ResourceBundle db = ResourceBundle.getBundle("db");
        System.out.println(db.getString("driver"));
        System.out.println(db.getString("url"));
        System.out.println(db.getString("username"));
        System.out.println(db.getString("password"));
    }
    @Test
    public void getResource2() throws IOException {
        InputStream in = new FileInputStream("W:/db.properties");
        ResourceBundle db = new PropertyResourceBundle(in);
        System.out.println(db.getString("driver"));
        System.out.println(db.getString("url"));
        System.out.println(db.getString("username"));
        System.out.println(db.getString("password"));
    }

    @Test
    public void getResource3() throws IOException {
        FileReader reader = new FileReader("/db.properties");
        ResourceBundle db = new PropertyResourceBundle(reader);
        System.out.println(db.getString("driver"));
        System.out.println(db.getString("url"));
        System.out.println(db.getString("username"));
        System.out.println(db.getString("password"));
    }

    @Test
    public void getResource4() throws IOException {
        BufferedReader reader = new BufferedReader(new FileReader("src/main/resources/db.properties"));
        ResourceBundle db = new PropertyResourceBundle(reader);
        System.out.println(db.getString("driver"));
        System.out.println(db.getString("url"));
        System.out.println(db.getString("username"));
        System.out.println(db.getString("password"));
    }

}

若要使用Test注解进行单元测试,需要导入junit包,具体方法参见:使用junit进行最简单的单元测试

上一篇:一次linux服务器报警有大量僵尸进程的问题处理


下一篇:卑微小测试的一天------丝滑切换自动化脚本环境