【Properties类详细总结】

一、Properties类是什么样的一个类?

我们知道:经过查阅我们知道:Properties是hashtable的子类,具备了map集合的特点:

1.它里面存放的键值对全部是字符串,键值全部都是String类型

2.它不具备泛型

二、存储这样仅为String类型的键值对,有什么具体的作用呢?

是集合中和IO技术相结合的一个重要容器,它最大的作用就是:它具备的这些键值对内容,可以作为配置文件

三、那么具体怎样来存放这些基本的键值对呢?

下面是一个具体的步骤,首先怎样添加这些键值对信息?
1.涉及到了添加键值对;
2.改变键所对应的value值的信息的方法;
3.怎样简洁快速高效地取出该map集合中的元素
方式:通过高级for循环和常规的迭代器遍历的方法
【注意】取出元素:因为是map集合,所以必须先要把键装入set集合中之后,才能
得到相应的value值

实例分析:

import java.util.*;
class PropertiesDemo1
{
	public static void main(String[] args) 
	{
		setAndGet();
	}

	public static void setAndGet()
	{
		Properties pro=new Properties();
		pro.setProperty("wang","28");
		pro.setProperty("jiejie","2");
		System.out.println(pro); //打印出来:默认的格式:{jiejie=2, wang=28}

		//当我再一次设置时,这时候我们改变会改变键wang具体的value值:
		pro.setProperty("wang","20");

		//通过该集合的自身方法:getgetProperty(键),能够获得其对应的value值
		System.out.println(pro.getProperty("wang")); //结果是:20

		//得到集合中全部的键值对:
		//1.当然有map转变为set集合之后,也可以用迭代的方式遍历,
		//2.下面我们用的高级循环去做,这样简洁快速
		Set<String> ss=pro.stringPropertyNames();
		for (String s: ss)
		{
			System.out.println(s+"::"+pro.getProperty(s));
		}

		//之前我们在学习集合中遍历元素都是用迭代器的方式取出元素:
		Iterator<String> is=ss.iterator();
		while (is.hasNext())
		{
			String key=is.next();
			String value=pro.getProperty(key);
			System.out.println(key+":::"+value);
		}
	}
}

四、我们怎样把这些键值对的信息存在一个配置文件中呢,这里先以存入txt文件为例,因为这个大家都比较熟悉?

上述:我们只是把基本的键值对添加到了内存中,没有没有添加到相应的配置文件中,下面:

我们通过字节流的方法来先具体的txt文件中添加基本的键值对信息:

/*
	把基本的键值对信息存入到相应的txt文件中:
	分析步骤;
	1.定义一个FileInputStream流和txt相关联,主要是为了让系统启动时能够读到该配置的数据
	2.建立Propertes集合
	3.用该集合的load方法随着系统的加载而把第1中读取流关联起来
	4.向集合中添加进入键值对元素;
	5.创建一个FileOutputStream流与txt关联,主要是为了把内容写入txt文件中,
	6.这时候的键值对,是在内存的集合中存在,需要进一步用集合的store方法将内容保存在txt中
	,用该方法可以与第5中的流对象关联起来。
	7.关闭流
	
	【注意】:系统默认识别的配置文件,也就是上述说到的txt文件,其内容中是固定的格式:
		键=值	所以在读取,并且修改的时候要注意这一点。
*/
import java.io.*;
import java.util.*;
class PropertiesDemo2
{
	public static void main(String[] args) throws IOException
	{
		writeTxt();
		//readTxt();
	}

	//这里就是添加进入相应元素的具体方法:
	public static void writeTxt() throws IOException
	{

		//1.用输入流关联到要写入键值对信息的txt文件
		//FileInputStream fis=new FileInputStream("wang.txt");

			//小插曲:当然如果这个文件不存在,自己先创建一个就OK了
			
		File file=new File("wang.txt"); //.ini就是配置文件2015-4-15
		if (!file.exists())//刚开始如果文件不存在就创建就OK了
			file.createNewFile();
		FileInputStream fis=new FileInputStream(file);
			

		//2.创建该集合:
		Properties pro=new Properties();

		//3.让系统加载到该文件
		pro.load(fis);
		
		//4.添加数据到内存中:
		pro.setProperty("wang","28");
		pro.setProperty("lu","26");
		pro.setProperty("jie","3");

		//5创建文件输出流与txt文件关联起来:
		FileOutputStream fos=new FileOutputStream("wang.txt");

		//6.把数据真正的写到一个wang.txt文件中:
		String comments="";//这里只是一个注释而已,不写内容也行,要作为参数传递的
		pro.store(fos,comments);
		
		//7.关闭流:
		fis.close();
		fos.close();
	}
}
//这样就完成了:可以找到wang.txt文件去看一下内容:是不是要求的内容!


五、那么具体怎样取出键值对,来进行修改呢?

下面我写了一个简单的例子:从配置文件中读取出数据,进行相应的修改:

就是例如上述的实例;我们要改变“lu=26”,变成“lu=22”怎么办?

原理很简单,

1.先把数据都读到集合中,

2.直接把“lu=26”,从新设置就ok了,不用取出操作,因为Properties中的方法setProperty();已经是封装好的了,直接找到键重新设置就行;

3.设置完之后,用store的方法直接重新保存在txt文件就行

废话不多说:上代码了:

import java.io.*;
import java.util.*;
class PropertiesDemo3
{
	public static void main(String[] args) throws IOException
	{
		modifyTxt();
	}

	//修改的方法:
	public static void modifyTxt() throws IOException
	{

		//1.用输入流关联到要写入键值对信息的txt文件,这时候txt文件是存在的了
		//我们要做的是取值修改:
		FileInputStream fis=new FileInputStream("wang.txt");

		//2.创建该集合:
		Properties pro=new Properties();

		//3.让系统加载到该文件
		pro.load(fis);
		
		//4.添加数据修改到内存中:把lu=26 改成lu=22;
		pro.setProperty("lu","22");

		//5创建文件输出流与txt文件关联起来:
		FileOutputStream fos=new FileOutputStream("wang.txt");

		//6.把数据真正的写到一个wang.txt文件中:
		String comments="modify,lu=22";
		pro.store(fos,comments);
		
		//7.关闭流:
		fis.close();
		fos.close();
	}
}
运行结果去txt文件中看看:


六、下面我们做一个综合实例看深入了解一下Properties的具体特点:

这其实就是老师讲的一个重要实例:在现实生活中,我们知道:有一些软件是有一定的免费试用次数,当免费次数完成了我们就无法再用了,其中会提示我们注册交钱,在继续使用!

其实:很容易想到的是有一个计数器
该计数器定义在程序中,随着程序的运行而在内存中存在,并且自增
可是随着该应用程序的推出,该计数器也在内存中消失了。

下一次启动程序,又会从0开始,这样就不没有效果了
所以:想到了配置文件,用于记录该软件的使用次数,次数到了,就over了,提示注释
配置文件中也一样用兼职对的形式存储,这样方法查看

所以也要用到map+IO技术,把使用的次数写入配置文件中,并且配置文件能够实现应用程序的
共享!话不多说:

直接进入代码分析:

import java.io.*;
import java.util.*;
class PropertiesDemo3 
{
	public static void main(String[] args) throws Exception
	{
		Properties pro=new Properties();//建立一个map集合
		File file=new File("count.ini"); //.ini就是配置文件
		if (!file.exists())//刚开始如果文件不存在就创建就OK了
			file.createNewFile();
		FileInputStream fis=new FileInputStream(file); //读取流关联配置文件

		pro.load(fis); //跟随系统一块加载!

		String value=pro.getProperty("time"); //获取键time对应的值
		int count=0;
		if (value!=null)
		{
			count=Integer.parseInt(value);//把String类型的value值变成Integer类型
			if (count>=5)
			{
				System.out.println("免费试用结束,如需继续使用,请注册吧!");
				return;
			}
		}
		count ++;
		pro.setProperty("time",count+""); 
		//count+""是因为要的是字符串
		//把每一次使用的次数又更该在内存中,最后
		//通过store方法,把配置文件中的内容改掉就行!
		FileOutputStream fos=new FileOutputStream(file);
		pro.store(fos,"");

		fos.close();
		fis.close(); //记得关闭流
	}
}
第一次运行时,会产生一个配置文件:


其中的内容是:


接着运行5次时,提示注册信息了,看看配置文件吧!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值