1、Properties类的介绍
在Java中提供了 java.util.Properties 类,来读取 .properties 属性文件。在程序调用 Properties 类的 load() 方法时,系统把 .properties 属性文件的内容加载到内存中。因为 Properties 类继承了 Hashtable 类,Properties 类把“=”之间的内容,添加到Hashtable 对象的 key 值,并同时添加 key 值对应的 value 值,也就是“=”右侧的值。所有在编写 .properties 属性文件时一定要用“=”号把名称与值分隔开。
通过 .properties 属性文形式只能保存 String 类型信息。
Properties 类是线程安全的,多个线程可以共享一个Properties对象,而不需要外部同步。
Properties类的构造方法:
构造方法 | 说明 |
---|---|
Properties() | 创建一个无默认值的空属性列表。 |
Properties(Properties defaults) | 创建一个带有指定默认值的空属性列表。 |
Properties类的常用方法:
方法 | 说明 |
---|---|
void load(InputStream inStream) | 从输入流中读取属性列表(键和元素对)。 |
String getProperty(String key) | 用指定的键在此属性列表中搜索属性。 |
String getProperty(String key, String defaultValue) | 用指定的键在属性列表中搜索属性。 |
void list(PrintStream out) | 将属性列表输出到指定的输出流。 |
void list(PrintWriter out) | 将属性列表输出到指定的输出流。 |
void loadFromXML(InputStream in) | 将指定输入流中由 XML 文档所表示的所有属性加载到此属性表中。 |
Enumeration<?> propertyNames() | 返回属性列表中所有键的枚举,如果在主属性列表中未找到同名的键,则包括默认属性列表中不同的键。 |
Object setProperty(String key, String value) | 调用 Hashtable 的方法 put。 |
void store(OutputStream out, String comments) | 以适合使用 load 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。 |
void storeToXML(OutputStream os, String comment) | 发出一个表示此表中包含的所有属性的 XML 文档。 |
void storeToXML(OutputStream os, String comment, String encoding) | 使用指定的编码发出一个表示此表中包含的所有属性的 XML 文档。 |
示例:Properties类的使用。
(1)在项目的默认路径(src目录)下创建 my.properties 属性文件(名称可以自定义,扩展名必须为 properties )。
userName=pan_junbiao
blogUrl=https://blog.youkuaiyun.com/pan_junbiao
(2)编写读取 properties 属性文件,并输出属性值。
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* Properties类的使用示例
*
* @author pan_junbiao
*/
public class PropertiesTest
{
public static void main(String[] args)
{
try
{
// 创建Properties类对象
Properties properties = new Properties();
// 读取properties属性文件到输入流中
InputStream is = PropertiesTest.class.getResourceAsStream("/my.properties");
// 从输入流中加载属性列表
properties.load(is);
// 获取properties文件中的属性值
String userName = properties.getProperty("userName");
String blogUrl = properties.getProperty("blogUrl");
// 输出结果
System.out.println("用户名称:" + userName);
System.out.println("博客地址:" + blogUrl);
} catch (IOException e)
{
e.printStackTrace();
}
}
}
执行结果:
2、使用 db.properties 文件配置数据库连接属性
示例:使用 db.properties 文件配置数据库连接属性,并实现对MySQL数据库的连接。
(1)在项目的默认路径(src目录)下创建 db.properties 属性文件,并编写MySQL数据连接的相关配置信息。
DRIVER_CLASS=com.mysql.cj.jdbc.Driver
DB_URL=jdbc:mysql://localhost:3306/db_admin?serverTimezone=Hongkong&useUnicode=true&characterEncoding=utf8&useSSL=false
DB_USER=root
DB_PASSWORD=123456
(2)编写获取 db.properties 属性文件信息,并实现对MySQL数据库的连接。
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
/**
* 使用 db.properties 文件配置数据库连接属性,<br />
* 并实现对MySQL数据库的连接
*
* @author pan_junbiao
*
*/
public class ConnTest
{
private static String DRIVER_CLASS; // 数据库驱动
private static String DB_URL; // 数据库连接地址
private static String DB_USER; // 数据库用户名称
private static String DB_PASSWORD; // 数据库用户密码
public static void main(String[] args)
{
try
{
// 创建Properties类对象
Properties properties = new Properties();
// 读取properties属性文件到输入流中
InputStream is = PropertiesTest.class.getResourceAsStream("/db.properties");
// 从输入流中加载属性列表
properties.load(is);
// 获取数据库连接属性值
DRIVER_CLASS = properties.getProperty("DRIVER_CLASS");
DB_URL = properties.getProperty("DB_URL");
DB_USER = properties.getProperty("DB_USER");
DB_PASSWORD = properties.getProperty("DB_PASSWORD");
// 加载数据库驱动类
Class.forName(DRIVER_CLASS);
System.out.println("数据库驱动加载成功");
// 获取数据库连接对象
Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
System.out.println("数据库连接成功");
} catch (ClassNotFoundException cnfe)
{
cnfe.printStackTrace();
} catch (SQLException sqle)
{
sqle.printStackTrace();
} catch (Exception ex)
{
ex.printStackTrace();
}
}
}
执行结果:
3、总结
(1)读取 .properties 属性文件时,使用 Class 对象的 getResourceAsStream()方法,把指定的属性文件读入输入流中,并使用 Properties 类中的 load() 方法,从输入流中读取属性列表(键/值对)。
(2)在使用 Class 对象的 load() 方法加载 .properties 属性文件的输入流后,数据在内存中是以 Hashtable 的形式进行保存的。
(3)使用 Properties 类的 getProperty() 方法,通过 key 键读取出 value 值。