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"));
}

}