黑马程序员-Properties类对配置文件的读取与操作。

------------------------------Android培训                                 Java培训 期待与您的交流!---------------------------

/*
	Properties是hashtable的子类
	它具有map集合的特点,而且他里面存储的键值对都是字符串。

	是集合和IO技术相结合的集合容器。

	该对象的特点:可以用于硬盘上键值对形式的配置文件。
	
	setProperty("键","值");
	
	Set<string> stringPropertyNames():返回对象的全部键的集合

	String getProperty("键"):		 :获取键对应的值

	那么在加载数据时,需要数据有固定格式,键=值
*/

import java.io.*;
import java.util.*;

class  PropertiesDemo
{
	public static void main(String[] args) 
	{
		getPro();
	}
	public static void getPro()
	{
		Properties pro=new Properties();	//创建一个Properties集合对象

		pro.setProperty("shengyi","21");	//添加一个键值对
		
		pro.setProperty("linyong","22");

		//Set<String> sets=pro.stringPropertyNames();			//返回键字符串的集合
		//for (String s:sets)
		//{
		//	System.out.println(s+":"+pro.getProperty(s));	//获取键对应的值
		//}
		
		System.out.println(pro);
	}
}




/*
    演示,如何将流中的数据存储到集合中,
    想要将info.txt中键值数据存到集合中操作。

        1.用一个流和info.txt文件关联。
        2.读取一行数据,将该行数据用“=”进行切割。
        3.等号左边作为键,右边作为值,存入到Properties集合中即可

*/

import java.io.*;
import java.util.*;

class  PropertiesFun
{
    public static void main(String[] args) throws IOException
    {
        propertiesGet();
    }

    //Properties中利用字节流直接将文件加载进集合,还能将改变的内存的结果存到流当中。
    public static void propertiesGet() throws IOException
    {
        FileInputStream fis=new FileInputStream("F:\\properties.txt");
        Properties pro=new Properties();
        pro.load(fis);                                                    //将流加载进集合

        //System.out.println(pro);
        //pro.list(System.out);

        //实现对配置文件做修改,并保存回去,在文件以#开头的属于注释内容
        pro.setProperty("name1","fsy100");                                //并没有将改变的值保存配置文件中
        
        FileOutputStream fos=new FileOutputStream("F:\\properties.txt");
        pro.store(fos,"变化");                                            //注释信息是中文,需注意文件的编码集
        pro.list(System.out);

        fis.close();
        fos.close();
    }


    public static void funProperties()throws IOException
    {
        Properties pro=new Properties();
        BufferedReader br=new BufferedReader(new FileReader("F:\\properties.txt"));        //与配置文件相关联
        String line=null;
        while ((line=br.readLine())!=null)                                                //读取到每一行的键值对
        {
            String[] aa=line.split("=");    //通过=切割字符串
            
            pro.setProperty(aa[0],aa[1]);                                                //切割后的前面做键,后者做值

        }
        br.close();
        
        System.out.println(pro);                                                        //输出是无序的
    }
}

/*
    
    用于记录应用程序运行次数。
    如果使用次数已到,那么给出注册提示。

    很容易想到的是计数器。
    可以计数器的缺点是:
            1.虽然程序的运行而在内存中存在,并进行自增。但是该计数器是定义在程序中的
            2.随着该应用程序的退出,该计数器也在内存中消失了。
            3.下一次启动程序,又是重新从0开始计数            
        达不到效果
    
    程序几时结束,该计数器的值也存在。
    下次程序启动后会先加载该计数器的值并加1,在重新存储起来。

    所以要建立一个配置文件。用于记录该软件的是使用次数.

    该配置文件使用键值对的形式。
    这样便于阅读数据,并操作数据。

    键值对是Map集合
    数据是以文件形式存储,io技术。
    Properties就是Map与IO的结合

    配置文件可以实现应用程序数据的共享。
*/

import java.io.*;
import java.util.*;

class  RunCount
{
    public static void main(String[] args) throws IOException
    {
        Properties pro=new Properties();                        //创建一个Properties集合

        File file=new File("F:\\count.propreties");                //将关联文件用File对象封装
        if (!file.exists())
            file.createNewFile();                                //判断是否存在,不存在则创建

        FileInputStream fis=new FileInputStream(file);            //关联一个存在的文件对象;
        
        pro.load(fis);                                            //载入流对象

        int count=0;                                            //临时统计变量
        String countvalue=pro.getProperty("count");                //当配置文件中没有时,会创建一个,初始value为null;

        if(countvalue!=null)                    
        {
            count=Integer.parseInt(countvalue);                    //将String类型的countvalue转为Integer
            if(count>=3){
                System.out.println("请注册");                    
                return;                                            //得到次数关闭软件
            }    
        }
                
        count++;                                                //每次使用后,count++
        FileOutputStream fos=new FileOutputStream(file);        
        pro.setProperty("count",count+"");                        //将改变后的值,写回集合

        pro.store(fos,"bianhua");                                //将pro的改变写入配置文件
        
        fis.close();                                            //关闭流
        fos.close();
        
    }
}



 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值