Properties类,表示一个持久的j集,可以存在流中,或者从流中加载
是Hashtable的子类 map集合的方法都能用
用途之一:在开发项目中,我们最后交给客户的是一个编译过的class文件,客户是无法操作源码的,当我们链接数据库时,需要在源码中写数据库名,密码,那么当客户需要更换数据库或者改密码时,就需要在源码中更改,这是非常不方便的,因此就用到这个类,在外部创建一个文件,文件中写上数据库名,密码,然后java代码读这个文件,这样客户就可以直接更改这个文件的内容来达到目的,方便操作。(具体请看Java学习笔记36)
Properties用法:
package com.zs.Demo; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Properties; import java.util.Set; public class Dmeo3 { public static void main(String[] args) { try { fun1(); fun2(); } catch (IOException e) { e.printStackTrace(); } } //关于Properties集合添加元素,获得数据,遍历数据 private static void fun2() throws IOException { FileOutputStream fo=new FileOutputStream("d:\ch.properties"); Properties p=new Properties(); //给p对象添加元素,键-值 p.setProperty("name", "张三"); p.setProperty("age", "18"); p.setProperty("password", "10010"); //map集合添加元素方法也能用 p.put("sex", "男"); //store方法将properties表中的属性列表写入输出字符 p.store(fo,""); fo.close(); //stringPropertyNames()将集合中的键存入一个set集合 Set<String> set = p.stringPropertyNames(); //遍历set集合 for (String s : set) { System.out.println(s+":"+p.get(s)); /*age:18 name:张三 password:10010*/ } System.out.println(p);//{age=18, password=10010, name=张三} 结果是无序的 } private static void fun1() throws IOException { Properties p=new Properties(); FileInputStream f=new FileInputStream("e:\workspace\d33\src\user.properties"); //load方法,将文件中的键值对加载到集合中 p.load(f); f.close(); System.out.println(p);//{password="1008611", name="张三"} } }
流操作规律总结:
流对象很多 解决问题(处理设备上数据)到底用哪儿个流
源:InputStream Reader
目的地:OutputStream Writer
明确要操作的文件是字节文件还是文本
字节:InputStream OutputStream
文本:Reader Writer
明确数据所在的具体设备:
源设备:硬盘,文件file开头
内存:数组,字符串
关于读取,In/Output的认识:
字节在内存中(In) 在内存外(磁盘上)(Out)
内存读Reader(read方法)磁盘上的数据到内存就是输入(Input)
磁盘写Writer(write方法)内存中的数据到磁盘就是输出(Output)