Java-Properties集合
一、Properties概述
java.util.Properties extends Hashtable<K,V> implements Map<K,V>
Properties(双列集合)是唯一一个与IO流相结合的集合,表示一组持久的属性。 Properties可以保存到流中或从流中加载。属性列表中的每个键及其对应的值都是一个字符串(key和value默认都是字符串)。
二、Properties集合特有方法
Properties中特有方法:
将集合中的数据(临时数据),存储到硬盘中(持久化数据)
void store(OutputStream out, String comments) 将此属性列表(键和元素对)写入此 Properties表中,以适合于使用load(InputStream)方法加载到 Properties表中的格式输出流。
OutputStream out:字节输出流,不能写入中文
comments:注释,用来解释说明文档,不能使用中文,默认为Unicode编码一般使用空字符串""。
void store(Writer writer, String comments)将此属性列表(键和元素对)写入此 Properties表中,以适合使用 load(Reader)方法的格式输出到输出字符流。
Writer writer:字节输入流,能写入中文
comments:注释,用来解释说明文档,不能使用中文,默认为Unicode编码一般使用空字符串""。
将硬盘中保存的文件(键值对组成的)读取到集合中进行使用:
void load(InputStream inStream)从输入字节流读取属性列表(键和元素对)。
InputStream inStream:字节输入流,不能读取中文字符的键值对
void load(Reader reader)以简单的线性格式从输入字符流读取属性列表(关键字和元素对)。
Reader reader:字符输入流,能读取含有中文的键值对
三、Properties集合其它常用方法
Object setProperty(String key, String value)相当于 Hashtable中方法 put。
String getProperty(String key)通过key找到对应的value值,相当于Map中的get方法。
Set stringPropertyNames()返回此属性列表中的一组键,其中键及其对应的值为字符串,相当于Map集合中keySet方法。
四、代码实现
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;
import java.util.Set;
public class IoDemo08 {
public static void main(String[] args) throws IOException {
//不需要指定泛型,默认都是字符串
Properties pr = new Properties();
//Object setProperty(String key, String value)相当于 Hashtable中方法 put
pr.setProperty("唐三藏", "唐僧");
pr.setProperty("孙行者", "孙悟空");
pr.setProperty("天蓬元帅", "猪八戒");
//key和value都是字符串,不能是其它类型
//pr.setProperty(1, 1);
//String getProperty(String key)通过key找到对应的value值,相当于Map中的get方法
String value = pr.getProperty("孙行者");
System.out.println(value);//输出结果:孙悟空
//Set<String> stringPropertyNames()返回此属性列表中的一组键,其中键及其对应的值为字符串,相当于Map集合中keySet方法
Set<String> names = pr.stringPropertyNames();
for(String key:names){
System.out.print(key+"="+pr.getProperty(key)+" ");//输出结果:天蓬元帅=猪八戒 唐三藏=唐僧 孙行者=孙悟空
}
/*
void store(OutputStream out, String comments)
void store(Writer writer, String comments)
使用步骤:
1.创建Properties集合,并完成添加数据
2.创建一个OutputStream流对象/Writer流对象,在构造方法中指定输出路径
3.调用Properties中store方法,进行输出
4.释放资源
*/
// 1.创建Properties集合,并完成添加数据
Properties pr1 = new Properties();
//Object setProperty(String key, String value)相当于 Hashtable中方法 put
pr1.setProperty("唐三藏", "唐僧");
pr1.setProperty("孙行者", "孙悟空");
pr1.setProperty("天蓬元帅", "猪八戒");
// 2.创建一个OutputStream流对象/Writer流对象,在构造方法中指定输出路径
//OutputStream流对象
FileOutputStream out = new FileOutputStream("D:\\eclipse\\eclipse\\example\\study\\io\\1.txt");
//Writer流对象
FileWriter writer = new FileWriter("D:\\eclipse\\eclipse\\example\\study\\io\\1.txt");
//3.调用Properties中store方法,进行输出
// OutputStream out:字节输出流,不能写入中文,会产生乱码
//pr1.store(out,"storage");
/* #storage
#Mon Feb 08 10:34:31 CST 2021
\u5929\u84EC\u5143\u5E05=\u732A\u516B\u6212
\u5510\u4E09\u85CF=\u5510\u50E7
\u5B59\u884C\u8005=\u5B59\u609F\u7A7A*/
//Writer writer:字节输入流,能写入中文
pr1.store(writer, "storage");
/* #storage
#Mon Feb 08 10:31:33 CST 2021 //时间是默认加的
天蓬元帅=猪八戒
唐三藏=唐僧
孙行者=孙悟空*/
// 4.释放资源
out.close();
writer.close();
System.out.println();
/*
void load(InputStream inStream)从输入字节流读取属性列表(键和元素对)。
void load(Reader reader)以简单的线性格式从输入字符流读取属性列表(关键字和元素对)
使用步骤:
1.创建一个Properties集合
2.创建InputStream/Reader流对象,在构造方法中指定读取路径(可以使用匿名内部类)
3.调用Properties集合中load方法读取保存键值对的文件
4.遍历Properties集合
4.释放资源
注意:
1.存储键值对的文件,键与值连接符可以自己定义
2.存储键值对的文件,键与值默认都是字符串,不用再加引号
3.存储键值对的文件,可以使用#号注释,注释的内容不会再被读取
*/
// 1.创建一个Properties集合
Properties pr3 = new Properties();
//2.创建InputStream/Reader流对象,在构造方法中指定读取路径
//InputStream流对象
FileInputStream in = new FileInputStream("D:\\eclipse\\eclipse\\example\\study\\io\\1.txt");
//Reader流对象
FileReader fr = new FileReader("D:\\eclipse\\eclipse\\example\\study\\io\\1.txt");
// 3.调用Properties集合中load方法
// pr3.load(in);
pr3.load(fr);
// 4.遍历Properties集合
//InputStream流对象不能读取中文键值对,会产生乱码
// Set<String> set = pr3.stringPropertyNames();
// for(String key:set){
// System.out.println(key+"="+); /* ??????=孙悟空
// ?ì?????§=唐僧
// ??????=猪八戒*/
// }
//Reader流对象能读取中文键值对
Set<String> set = pr3.stringPropertyNames();
for(String key:set){
System.out.println(key+"="+pr3.getProperty(key));
/*天蓬元帅=猪八戒
唐三藏=唐僧
孙行者=孙悟空*/
}
}
}