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));
	    	   										/*天蓬元帅=猪八戒
												           唐三藏=唐僧
												           孙行者=孙悟空*/
	       }
	}

}


版权声明:本文为m0_47209867原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。