浅谈java的Properties类
1.Properties类概述
java.util.Properties
继承自 Hashtable
,用来表示一个持久的属性集。它使用键值结构存储数据,每个键及其对应值都是一个字符串。该类也被许多Java类使用,比如获取系统属性时,System.getProperties
方法就是返回一个Properties
对象。
Hashtable
是Map集合的实现类,它是最早期的一个双列结合,由于它自身是单线程的,已被 Hashmap
给取代了,但是它的子类Properties
仍然活跃在历史舞台,它是唯一一个与IO流结合的集合。Properties
数据可取自流中(从流中加载),也可以将数据存入到流中。
2.Properties类的常用方法
(1)构造方法
public Properties()//创建一个空的属性列表。
(2)功能性方法
public Object setProperty(String key, String value) // 向属性集添加一对属性,第一个参数为键名,第二个参数为键值,传递的参数均是字符串类型数据
public String getProperty(String key) //根据键的名称搜索集合中的键值
public Set<String> stringPropertyNames() //用于遍历集合中所有的键值对
(3)与流相关的方法
//load方法的功能是:从硬盘中保存的键值对文件读取到内存中使用。
//具体的做法是:将传入的流中的数据加载进内存,传入的流可以是字节输入流,也可以是字符输入流。
public void load(InputStream inStream) //传入的参数为字节输入流,不能读含有中文的键值对。
public void load(Reader reader) // 从字符输入流中读取键值对,可以读取含有中文的键值对。
3.Properties的应用举例
1.读取配置文件时使用。即通过将各种参数写入到配置文件中,供功能代码读取。
例如:下例是一个JDBCUtils工具类的源码。其中使用到了Properties类及其load方法。用于读取配置文件:jdbc.properties。
package main.java.cn.keepcoding.JDBCUtils;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;
public class JDBCUtils {
private static String url;
private static String user;
private static String password;
//文件读取
static{
try {
//1.创建一个属性列表
Properties pro = new Properties();
//2.获取一个ClassLoader对象
ClassLoader classLoader = JDBCUtils.class.getClassLoader();
//3.创建一个URL对象
URL res = classLoader.getResource("jdbc.properties");
assert res != null;
//4.获取jdbc.properties的url
String path = res.getPath();
System.out.println(path);
//5.加载jdbc.properties文件进内存
//load方法中需要传递一个流进来,传递的流是FileReader流,读的文件是:path路径标识的文件。
pro.load(new FileReader(path));
//6.获得:url、user、password、driver值
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
String driver = pro.getProperty("driver");
//注册驱动
Class.forName(driver);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
public static void close(Statement stmt, Connection conn){
if( stmt != null){
try {
//释放执行sql的对象
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( conn != null){
try {
//释放连接
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(ResultSet rs, Statement stmt, Connection conn){
if( rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}