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进行最简单的单元测试