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)

  

04-28 03:46