ResourceBundle读取properties文件
集成开发工具:IDEA
下面是一个名为db.properties的文件的内容
driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/db?useSSL=true&useUnicode=true&characterEncoding=utf8username=rootpassword=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 {@Testpublic 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"));}@Testpublic 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"));}@Testpublic 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"));}@Testpublic 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进行最简单的单元测试