概述
java.util.Properties继承于Hashtable,来表示一个持久的属性集。Properties可以保存在流中或从流中加载。它使用键值结构存储数据,每个键及其对应值都是一个字符串(双列集合)。该类也被许多java类使用,比如获取系统属性时,System.getProperties方法就是返回一个Properties对象。
Hashtable是最早期的双列集合,但由于其单线程操作被Hashmap替代了,然而其子类Properties仍活跃着,因为是唯一和IO流相结合的集合。Properties类的出现简化了对属性持久化的操作。属性持久化又大大简化了建立高扩展性程序的过程。
简单理解:是一个可以持久化读写数据(键值对)的集合对象。
Properties类
构造方法
构造方法摘要 | |
---|---|
Properties() 创建一个无默认值的空属性列表。 | |
Properties(Properties defaults) 创建一个带有指定默认值的空属性列表。 |
知识点连接:持久化作用是将程序数据在持久状态和瞬时状态间转换的机制。即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。
可以使用Properties集合中的方法store,把集合中的临时数据,持久化写入到硬盘中存储。
void | store(OutputStream out, String comments) 以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。 |
void | store(Writer writer, String comments) 以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符。 |
参数:OutputStream:字节输出流,不能写中文(英文字母(不分大小写)和数字以ASCII码存储在文件里都是占一个字节,中文占俩,但字节输出流一次读写一个字节,故无法写中文)
Writer writer:字符输出流,可以写中文。
String comments:注释,解释说明保存的文件是做什么用的。注意该注释不能使用中文,会产生乱码(因为其默认为Unicode编码,但系统默认编码是GBK),一般使用空字符串。
使用步骤:
1.创建Properties集合对象,添加数据。
2.创建字节/字符输出流对象,构造方法中绑定要输出的目的地
3.使用Properties集合对象的方法store,将集合中的数据,持久化写入到硬盘中存储。
4.释放资源
// 可以使用Properties集合中的方法store,把集合中的临时数据,持久化写入到硬盘中存储。 // 创建Properties集合对象,添加数据。 Properties prop = new Properties(); // public Object setProperty(String key,String value):保存一对属性。 prop.setProperty("赵丽颖","冯绍峰"); prop.setProperty("孙俪","邓超"); prop.setProperty("陶虹","徐峥"); // 创建字节/字符输出流对象,构造方法中绑定要输出的目的地 FileWriter fw = new FileWriter("D:\\a\\cc.txt"); // 使用Properties集合对象的方法store,将集合中的数据,持久化写入到硬盘中存储。 prop.store(fw,"save data"); // 释放资源 fw.close();
运行截图:
也可以使用Properties集合中的方法load,可以把硬盘中的文件(键值对),读取到集合中使用。
void | load(InputStream inStream) 从输入流中读取属性列表(键和元素对)。 |
void | load(Reader reader) 按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。 |
参数:InputStream:字节输入流,不能读取含有中文的键值对(英文字母(不分大小写)和数字以ASCII码存储在文件里都是占一个字节,中文占俩,但字节输出流一次读写一个字节,故无法写中文)
Writer writer:字符输入流,能读取含有中文的键值对。
使用步骤:
1.创建Properties集合对象。
2.使用Properties集合对象中的方法load读取保存键值对的文件。
3.遍历Properties集合。
注意事项:
1.存储键值对的文件中,键与值默认的连接符号可以使用等于号、空格或其他符号。
2.存储键值对的文件中,可以使用#进行注释,被注释的键值对不会再被读取。
3.存储键值对的文件中,键与值默认都是字符串,不用再加引号。
// 创建Properties集合对象 Properties prop = new Properties(); // 使用Properties集合对象中的方法load读取保存键值对的文件。 prop.load(new FileReader("D:\\a\\cc.txt")); // 获取所有键 Set<String> keySet = prop.stringPropertyNames(); for(String key : keySet){ // 遍历 System.out.println("key:" + key + ",value:" + prop.getProperty(key)); }
基本的存储方法
public Object setProperty(String key,String value):保存一对属性。(底层就是调用Hashtable的put方法)
public String getProperty(String key):使用此属性列表中指定的键搜索属性值。相当于Map集合中的的get(key)方法,但固定了参数类型为String
public Set<String> stringPropertyNames():所有键的名称的集合。相当于Map集合中的的keySet方法,但固定了参数类型为String
// 创建一个Properties对象,泛型默认字符串 Properties prop = new Properties(); // public Object setProperty(String key,String value):保存一对属性。 prop.setProperty("赵丽颖","冯绍峰"); prop.setProperty("孙俪","邓超"); prop.setProperty("陶虹","徐峥"); // public Set<String> stringPropertyNames():所有键的名称的集合。 Set<String> keySet = prop.stringPropertyNames(); for(String key : keySet){ // 遍历输出key // public String getProperty(String key):使用此属性列表中指定的键搜索属性值。 System.out.println("key:" + key + ",value:" + prop.getProperty(key)); }
运行截图: