`

黑马程序员23-2: Properties配置文件的读取修改,FileReader,BufferedReader 模拟load方法,注册机

 
阅读更多
------- android培训 java培训、期待与您交流!-------




FileReader,BufferedReader 模拟load方法,FileInputStream ,注册机
package cn.itcast.io.p2.properties;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
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 PropertiesDemo {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {

		/*
		 * Map
		 * 	|--Hashtable
		 * 		|--Properties:
		 * 
		 * Properties集合:
		 * 特点:
		 * 1,该集合中的键和值都是字符串类型。
		 * 2,集合中的数据可以保存到流中,或者从流获取。
		 * 
		 * 通常该集合用于操作以键值对形式存在的配置文件。 
		 * 
		 * 
		 */
		
//		methodDemo_4();
		myLoad();
		
		test();
	}
	
	
	//对已有的配置文件中的信息进行修改。 
	/*
	 * 读取这个文件。
	 * 并将这个文件中的键值数据存储到集合中。
	 * 在通过集合对数据进行修改。
	 * 在通过流将修改后的数据存储到文件中。 
	 */
	public static void test() throws IOException{
		//读取这个文件。
		File file = new File("info.txt");
		if(!file.exists()){
			file.createNewFile();
		}
		FileReader fr = new FileReader(file);

		//创建集合存储配置信息。
		Properties prop = new Properties();
		
		//将流中信息存储到集合中。
		prop.load(fr);
		
		prop.setProperty("wangwu", "16");

		FileWriter fw = new FileWriter(file);
		//配置文件存储方式
		prop.store(fw,"");
		
//		prop.list(System.out);		
		fw.close();
		fr.close();
	}

	//模拟一下load方法。
	public static void myLoad() throws IOException{
		
		Properties prop  = new Properties();	
		BufferedReader bufr = new BufferedReader(new FileReader("info.txt"));	
		String line = null;	
		while((line=bufr.readLine())!=null){		
			if(line.startsWith("#"))
				continue;		
			String[] arr = line.split("=");		
			//用i遍历就可以
//			System.out.println(arr[0]+"::"+arr[1]);
			prop.setProperty(arr[0], arr[1]);
		}	
		prop.list(System.out);		
		bufr.close();		
	}
	
	//读取配置文件的方法
	public static void methodDemo_4() throws IOException {			
		Properties prop  = new Properties();		
		//集合中的数据来自于一个文件。 
		//注意;必须要保证该文件中的数据是键值对。
		//需要使用到读取流。文件输入流 
		FileInputStream fis = new FileInputStream("info.txt");
		
		//使用load方法。 
		prop.load(fis);
		
		prop.list(System.out);

	}
	//添加/修改配置文件的内容
	public static void methodDemo_3() throws IOException {
		Properties prop  = new Properties();
		
		//存储元素。 
		prop.setProperty("zhangsan","30");
		prop.setProperty("lisi","31");
		prop.setProperty("wangwu","36");
		prop.setProperty("zhaoliu","20");
		
		//想要将这些集合中的字符串键值信息持久化存储到文件中。
		//需要关联输出流。文件输出流
		FileOutputStream fos = new FileOutputStream("info.txt");
		
		//将集合中数据存储到文件中,使用store方法。
		prop.store(fos, "info");
		
		fos.close();
		
	}

	/**
	 * 演示Properties集合和流对象相结合的功能。
	 */
	//列出配置文件到控制台
	public static void methodDemo_2(){
		Properties prop  = new Properties();
		
		//存储元素。 
//		prop.setProperty("zhangsan","30");
//		prop.setProperty("lisi","31");
//		prop.setProperty("wangwu","36");
//		prop.setProperty("zhaoliu","20");
	
		prop = System.getProperties();
		prop.list(System.out);
	}
	
	/*
	 * Properties集合的存和取。
	 */
	//取出配置文件的信息
	public static void propertiesDemo(){
		//创建一个Properties集合。
		
		Properties prop  = new Properties();
		
		//存储元素。 
		prop.setProperty("zhangsan","30");
		prop.setProperty("lisi","31");
		prop.setProperty("wangwu","36");
		prop.setProperty("zhaoliu","20");
		
		//修改元素。 
		prop.setProperty("wangwu","26");
		
		//取出所有元素。
		Set<String> names = prop.stringPropertyNames();
		
		for(String name : names){
			String value = prop.getProperty(name);
			System.out.println(name+":"+value);
		}
	}
}


package cn.itcast.io.p2.properties;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;



/*
 * 定义功能,获取一个应用程序运行的次数,如果超过5次,给出使用次数已到请注册的提示。并不要在运行程序。
 * 
 * 思路:
 * 1,应该有计数器。 
 * 每次程序启动都需要计数一次,并且是在原有的次数上进行计数。
 * 2,计数器就是一个变量。 突然冒出一想法,程序启动时候进行计数,计数器必须存在于内存并进行运算。
 * 可是程序一结束,计数器消失了。那么再次启动该程序,计数器又重新被初始化了。
 * 而我们需要多次启动同一个应用程序,使用的是同一个计数器。 
 * 这就需要计数器的生命周期变长,从内存存储到硬盘文件中。
 * 
 * 3,如何使用这个计数器呢?
 * 	首先,程序启动时,应该先读取这个用于记录计数器信息的配置文件。
 *  获取上一次计数器次数。 并进行试用次数的判断。
 *  其次,对该次数进行自增,并自增后的次数重新存储到配置文件中。 
 *  
 * 
 * 4,文件中的信息该如何进行存储并体现。
 * 	直接存储次数值可以,但是不明确该数据的含义。 所以起名字就变得很重要。
 * 	这就有了名字和值的对应,所以可以使用键值对。
 * 	可是映射关系map集合搞定,又需要读取硬盘上的数据,所以map+io = Properties.
 * 
 * 
 * 
 */

public class PropertiesTest {

	/**
	 * @param args
	 * @throws IOException 
	 * @throws Exception 
	 */
	public static void main(String[] args) throws IOException  {
		
		getAppCount();
		
	}
	
	public static void getAppCount() throws IOException{
		
		//将配置文件封装成File对象。
		File confile = new File("count.properties");
		//用对象判断,如果不存在就创建文件
		if(!confile.exists()){
			confile.createNewFile();
		}
		//用文件字节输入流操作
		FileInputStream fis = new FileInputStream(confile);
		
		Properties prop = new Properties();
		
		prop.load(fis);
		
		
		//从集合中通过键获取次数。		
		String value = prop.getProperty("time");
		//定义计数器。记录获取到的次数。
		int count =0;
		if(value!=null){
			count = Integer.parseInt(value);
			if(count>=5){
//				System.out.println("使用次数已到,请注册,给钱!");
//				return;
				throw new RuntimeException("使用次数已到,请注册,给钱!");
			}
		}
		count++;
		
		//将改变后的次数重新存储到集合中。
		prop.setProperty("time", count+"");
		
		FileOutputStream fos = new FileOutputStream(confile);
		
		prop.store(fos, "");
		
		fos.close();
		fis.close();
		
		
	}

}


------- android培训 java培训、期待与您交流!-------


详细请查看:http://edu.csdn.net/heima -------

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics