java Properties集合

开始时间:2018年8月27日21:00:38

结束时间:2018年8月27日21:51:59

累计时间:课上三小时+今天晚上一小时=四小时

一: Properties集合: 
  属性表集合: 特点: key value String类型: 能够和IO流结合使用:
   
  store()
  load();
  storeToXml();
  loadFromXml(); 

文件的介绍:     
   .properties :属性表文件:
   特点:(1) 存放都是key = value ; 存放的内容都是键值对: 
               (2)文件当中不能保存中文: 
              (3) 通常情况用来做配置文件: 
               
         传统的方式: 
         native2ascii inputFile outFile      
      
   xml文件:    extensible markup Language 可扩展的标记语言: 和html 同根同源。
   webservice
   (1)用来数据的储存:  配置文件使用
   (2)不同系统之间数据的传输: 
  
 类的加载器获得资源流: 获得类路径下的资源: src ---->classes getResourceAsStream("path");相对于类路径
 通过类获得资源流: Class getResourceAsStream("path");//相对于当前文件的路径:
  
 
二: 集合的工具类:  
  Collections: 工具类: 方法都是静态的,构造器私有的。 
     |----max(Collection c); 根据自然顺序求最值:
     |--- max(Collection c, Comparator comp); 根据自定义的比较规则 求最值: 
     |----min(Collection<? extends T> coll) 
     |--- sort(List list); list集合才保证顺序。 默认自然顺序排序: 
     |--- sort(List list, Comparator com);自定义比较规则 进行排序
     |----reverse((List list); 元素的反转
     |----synchronizedList(List<T> list) ;  将线程异步的List 转换成线程同步的list。 
     |----synchronizedXxx();  异步转换成同步: 
     ArrayList 集合: 异步,数据不安全。
     
  注意: 以后要对集合当中的元素进行相关操作的时候, 首先过来从Collections当中查找相应的方法。 
              没有需要使用的方法,然后自定义。 

三: Properties集合: 
(1)存放的key 和 value 都是String类型,作为集合的属性: 所以集合称之属性表集合: 
(2)构造器: 
    new Properties(); 创建一个空的属性表集合: 
    API方法: 
    存放:  setProperty(key , value); 
      getProperty(key); 返回String 类型: 
      stringPropertyNames();  获得key的集合 Set集合: 1.6
      propertyNames() //使用枚举遍历属性表集合: 1.0 
      
四:     属性表集合和外部的文件进行通信: (IO流)

   store(Writer writer, String comments) ;
   store(OutputStream out ,String comments); 
   
   storeToXml(OutputStream out,String comments); //将数据写到xml文件当中,必须使用字节输出流:
      
   load(Reader r); 
   load(InputStream in); 
   loadFromXml(InputStream in);
   
   list(PrintStream ps); 
   
五: 使用  类的加载器读取文件: 
   类的加载器只能获得类路径下的资源: 类路径: classes 目录就称之为类路径。
  (0)获得Class实例:  
  Class 类型: 加载到Jvm当中字节码对象的类型: 
  获得方式: 
   a:  文件名称.class  
   b:  对象.getClass();
   c:  Class.forName("全路径名称");
   
  (1)获得类的加载器:getClassLoader() 获得一个类的加载器: 
           类的加载器: 系统类的加载器, (应用类的加载器),.. . 三种加载器:
    
  (2)调用方法: getResourceAsStream();  返回的是InputStream 
  
  总结: 
  this.getClass().getClassLoader().getResourceAsStream(); 
  
  
六: 补充: 使用Class 获得资源流: 
(1)获得    Class : 方式三: 
(2)获得    getResourceAsStream(String name) ; 返回一个InputStream; 
 
 class 获得资源流: 相对路径: 相对于当前文件的存放位置: 

实例:将属性表集合当中的数据写出到外部的文件

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Properties;

public class PropertiesDemo2 {
	public static void main(String[] args) throws IOException {
		/*
		 * 演示属性表集合的存取方法: 
		 */
		
		Properties p = new Properties(); 
		//存放在属性表集合: 内存当中: 
		p.setProperty("url", "jdbc:mysql:http://localost:3306/test");
		p.setProperty("driver", "com.mysql.jdbc.Driver");
		p.setProperty("username", "root");
		p.setProperty("password", "root");
		
		//调用方法: 
	
//		write2File(p);
		
//		write2File02(p);
		
//		String fileName = "C:/Users/Mrzhang/javaEE/javaSE-07/javaSE-43/db1.properties";
		String fileName = "C:/Users/Mrzhang/javaEE/javaSE-07/javaSE-43/dbXml1.xml";
		
		String comments = "这是数据库的配置参数信息";
		write2File(p,fileName, comments); 
		
		
		//演示list(PrintStream out) ;
		p.list(new PrintStream(new File("C:/Users/Mrzhang/javaEE/javaSE-07/javaSE-43/dbXml2.xml")));
		
		
		
		
	}
	
	//定义功能: 将属性表集合当中的数据写出到外部的文件当中: .properties
/*	public static void write2File(Properties p) throws IOException{
		
		//调用方法: 
		p.store(new FileWriter(new File("C:/Users/Mrzhang/javaEE/javaSE-07/javaSE-43/db.properties")), "这是一个数据库的配置文件的信息");
		
	}
	//定义功能: 将属性表集合当中的数据写出到外部的文件当中: .properties
	public static void write2File02(Properties p) throws IOException{
		p.storeToXML(new FileOutputStream(new File("C:/Users/Mrzhang/javaEE/javaSE-07/javaSE-43/dbXml.xml")), "这是xml文件保存数据信息");
	}*/
	
	
   public static void write2File(Properties p,String fileName,String comments) throws IOException{
		
	   if(p==null){
		   throw new RuntimeException("传入的集合不能为null"); 
	   }
	   if(fileName == null || fileName.trim().length()==0 || fileName.trim()=="" ){
		   
		   throw new RuntimeException("传入的文件名称不能为空"); 
	   }
	   
	    if(fileName.endsWith(".properties")){
	    	p.store(new FileWriter(new File(fileName)), comments);
	    }else if(fileName.endsWith(".xml")){
	    	p.storeToXML(new FileOutputStream(new File(fileName)), comments);
	    }else{
	    	throw new RuntimeException("您出入的文件格式不正确,请重新输入");
	    }
		
	}
	
	
}

     

 从外部的文件当中读取数据 到内存当中: 



import java.io.File;
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.Enumeration;
import java.util.Properties;
import java.util.Set;

public class PropertiesDemo03 {
	public static void main(String[] args) throws FileNotFoundException, IOException {
		/*
		 * 演示: 从外部的文件当中读取数据 到内存当中: 
		 */
		
		
		//通过外部文件:并且将其设置到p集合当中, 通过key 获得对应的value。 
	/*	Properties p = new Properties(); 
		
		//将流当中的数据加载到集合当中:
		p.load(new FileReader("C:/Users/Mrzhang/javaEE/javaSE-07/javaSE-43/db1.properties"));
	   
		//System.out.println(p);
		
        Set<String> keys = p.stringPropertyNames();
        for(String key: keys){
        	String value = p.getProperty(key);
        	System.out.println(key+":"+value);
        }*/
		
		
		//调用readFile方法: 将外部的数据读取到p集合当中:
		Properties p = new Properties(); 
//		String fileName = "C:/Users/Mrzhang/javaEE/javaSE-07/javaSE-43/db1.properties";
		String fileName = "C:/Users/Mrzhang/javaEE/javaSE-07/javaSE-43/dbXml1.xml";
		
		Properties p1 = readFile(p,fileName);
		System.out.println(p1);
		
	}
	
	
	//定义一个功能: 读取外部文件的数据: 
	public static Properties readFile(Properties p , String fileName)throws IOException{

		   if(p==null){
			   throw new RuntimeException("传入的集合不能为null"); 
		   }
		   if(fileName == null || fileName.trim().length()==0 || fileName.trim()=="" ){
			   
			   throw new RuntimeException("传入的文件名称不能为空"); 
		   }
		   
		    if(fileName.endsWith(".properties")){
		    	p.load(new FileReader(new File(fileName)));
		    	return p;
		    }else if(fileName.endsWith(".xml")){
		    	p.loadFromXML(new FileInputStream(new File(fileName)));
		    	return p;
		    }else{
		    	throw new RuntimeException("您出入的文件格式不正确,请重新输入");
		    }
	}
}

     

 使用类的加载器获得文件当中的数据:

  



import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class ReadFileDemo01 {
	public static void main(String[] args) throws ClassNotFoundException, IOException {
		/*
		 * 使用类的加载器获得文件当中的数据: 
		 */
		
		//1:方式一: 获得Class实例: 字节码对象类型: 
		Class c = ReadFileDemo01.class; 
		
		//方式二: 
		Class c1= new ReadFileDemo01().getClass(); //获得Class 
		
		//方式三: 
		Class clazz = Class.forName("com.yidongxueyuan.properties.ReadFileDemo01");//全路径名称: 包名.类型
	
	
	    //2: 使用Class 当中的APi方法:获得类的加载器: 
		ClassLoader loader  = clazz.getClassLoader();
		
		//3: 使用类的加载器的方法: 
		InputStream in = loader.getResourceAsStream("a.txt");// a.txt 在src下存放:  相对于类路径:
		
		//4:读取文件当中的数据: 
		int len = 0 ; 
		byte buf []= new byte[1024]; 
		
		while((len = in.read(buf))!=-1){
			System.out.println(new String(buf, 0, len ));
		}
		
		/*//4:使用Properties 集合: 
		Properties p = new Properties(); 
		//流当中的数据: 封装到p集合当中: 
		p.load(in);
		
		System.out.println(p);*/
		
		
		
		
	}
}

使用Class 获得资源流:

import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.io.IOUtils;

public class ReadFileDemo02 {
	/*
	 * 使用Class 获得资源流:
	 */
	
	public static void main(String[] args) throws ClassNotFoundException, IOException {
//		Class c = ReadFileDemo02.class; 
		Class c = Class.forName("com.yidongxueyuan.properties.ReadFileDemo02");
		
		InputStream in = c.getResourceAsStream("b.txt");// b.txt 相对于当前文件存放的位置: com.yidongxueyuan.properties
		System.out.println(in);
		
		
		//使用jar包: 
		String string = IOUtils.toString(in);
		System.out.println(string);
		
	}
}

2018年8月27日22:12:20于易动 

这两天比较贪玩 写的都很详细 和以前比较质量不好 

凡是写的不好的自己会在下面说明  以后再补上吧

猜你喜欢

转载自blog.csdn.net/qq_41517071/article/details/82119480