Properties集合
1. 概述
java.util.Properties
集合 extends Hashtable<K, V> implements Map<K, V>
Properties叫做属性集, 是一个双列集合, 里面的每一个元素都是键值对, 键和值都是字符串类型
Properties的特点 :
- Properties实现了Map接口, 拥有Map中的所有方法
- 没有泛型, 键和值都是字符串
- 支持对流(文件)的操作, 可以从文件中读取键值对
2. Properties的构造方法
| 构造方法 | 作用 | | -------------- | ------------------------------------------------------------ | | Properties()
| 空参数构造方法,使用该构造方法创建的Properties集合里面没有任何东西。 |
3. Properties的方法
| 修饰符 | 返回值 | 方法名 | 参数列表 | 作用 | | ------ | ----------- | --------------------- | ---------------------------- | ------------------------------------------------------------ | | public | Object | setProperty
| ( String key, String value ) | 向Properties集合中添加键值对, 相当于put | | public | String | getProperty
| ( String key ) | 根据键获取值, 相当于get(key) | | public | Set | stringPropertyNames
| ( ) | 获取Properties中的所有的key,并放入到Set集合中返回, 相当于keySet() |
以上基础方法使用示例 :
public class Demo01Properties {
public static void main(String[] args) {
//创建Properties集合对象
Properties p = new Properties();
//Object setProperty(String key, String value): 向Properties集合中添加键值对。
p.setProperty("it001", "jack");
p.setProperty("it002", "rose");
p.setProperty("it003", "tony");
//输出结果
System.out.println(p);
//String getProperty(String key): 根据键获取值。
//获取it001对应的值
System.out.println("it001对应的值:" + p.getProperty("it001"));
System.out.println("it002对应的值:" + p.getProperty("it002"));
System.out.println("========================================");
//Set<String> stringPropertyNames():获取Properties中的所有的key,并放入到Set集合中返回。
Set<String> set = p.stringPropertyNames();
//遍历Set集合,获取集合中的每一个键
for (String key : set) {
//变量key表示的是集合中的每一个键。
System.out.println(key + "-" + p.getProperty(key));
}
}
}
4. Properties与流相关方法
- Properties可以和流一起使用, 可以从文件中读取键值对.
- Properties类表示了一个持久的属性集, Properties可保存在流中或从流中加载
- Properties集合是唯一一个和IO流相结合的集合
- 可以使用Properties集合中的==方法store==, 把集合中的临时数据, 持久化==写入==硬盘中储存
- 可以使用Properties集合中的==方法load==, 把硬盘中保存的数据( 键值对 ), ==读取==到集合中使用
上面的load方法,可以将文件中的键值对读取(加载)到Properties集合中,要读取的文件也是有要求的
文件的要求 :
- 文件一般以.properties结尾,以.properties结尾的文件一般叫做配置文件 (软性规定)
- 文件中的键值对必须按照固定格式保存, 键和值之间使用=隔开,每一个键值对之间要换行(硬性规定)
键=值
键=值
键=值
...
注意 :
- 储存键值对的文件中, 键与值默认的连接符号使用=
- 储存键值对的文件中, 可以使用#进行注释, 备注是的键值对不会再被读取
- 储存键值对的文件中, 键与值默认都是字符串, 不用在加引号
| 修饰符 | 返回值 | 方法名 | 参数列表 | 作用 | | ------ | ------ | ------- | ----------------------------------- | ------------------------------------------------------------ | | public | void | load
| ( Reader reader ) | 参数要传递一个字符输入流, 可以将文件中的键值对读取到Properties集合 | | public | void | load
| ( InputStream inStream ) | 参数要传递一个字节输入流, 可以将字节输入流对应文件中的键值对读取到Properties集合 | | public | void | store
| (Writer writer, String comments) | | | public | void | store
| (OutputStream out, String comments) | |
参数 :
OutputStream out : 字节输出流, 不能写入中文
Writer writer : 字符输出流, 可以 写中文
String comments : 注释, 用来解释说明保存的文件是做什么用的
不能使用中文, 会产生乱码, 默认是Unicode编码, 一般用""空字符串.
使用步骤 :
- 创建Properties集合对象, 添加数据
- 创建字节输出流/ 字符输出流对象, 构造方法中绑定要输出的目的地
- 使用Properties集合中的方法store, 把集合中的临时数据, 持久化写入硬盘中储存
- 释放资源
可以使用Properties集合中的方法load, 把硬盘中保存的文件(键值对), 读取到集合中使用
void load(InputStream inStream)
void load(Reader reader)
参数 :
InputStream inStream : 字节输入流, 不能读取含有中文的键值对
Reader reader : 字符输入流, 能读取含有中文的键值对
public class Demo02Properties {
public static void main(String[] args) throws IOException {
//1. 创建Properties集合
Properties p = new Properties();
//2. 创建输入流对象,并绑定一个文件。
InputStream is = new FileInputStream("day11config.properties");
//3. 调用Properties集合的load方法,传递输入流对象,就可以将文件中的键值对读取到Properties集合了。
p.load(is);//is这个流绑定的文件是config.properties,所以会将config.properties中的键值对读取到Properties集合
//输出
System.out.println(p);
//4. 释放资源。
is.close();
}
}