一、Properties类
1.特点
1)HashTable子类,map中的方法均可以使用
2)没有泛型,键值都是字符串类型的
3)可以持久化的属性集
4)可以和流结合使用
2.方法
.setProperty(String Key,String Value)相当于Map的put()方法
.stringPropertyNames(String s)相当于Map的keySet()方法
3.Load方法:传递字节或字符输入流,读取键值对,保存到集合中
Load(InputStream in)
Load(Reader r)
//初始化Properties
Properties pro=new Properties();
//定义字符输入流
FileInputStream fis=new FileInputStream("E:\\a\\config.properties");
//从输入流中读取属性列表
pro.load(fis);
//打印显示
System.out.println(pro);
4.Store方法:接收字节或字符输出流,将键值对写入文件中
Store(OutputStream out)
Store(Writer w)
//定义字节输入流
FileOutputStream fos=new FileOutputStream("E:\\a\\config.properties");
//将键值为score的值改变为100
pro.setProperty("score", "100");
//将键值对写入输出流中
pro.store(fos, null);
二、序列化和反序列化
特点:主要用于类的实例化对象的存储,其他都和字节字符输入输出流一致。
序列化(ObjectOutputStream ):将Java对象的基本数据类型和图形写入 OutputStream。可以使用InputStream读取对象,通过在流中使用文件实现对象的存储。
//序列化:内存-->硬盘
public static void put() throws IOException{
FileOutputStream fos=new FileOutputStream("E:\\a\\ab.txt");
ObjectOutputStream oos=new ObjectOutputStream(fos);
//把类文件写到硬盘中
oos.writeObject(new Person("张琳",10));
oos.close();
}
反序列化(ObjectInputStream):对以前使用InputStream 写入的基本数据和对象进行反序列化。支持Serializable接口的对象才能从流读取。
//反序列化:硬盘-->内存
public static void in()throws IOException, ClassNotFoundException{
FileInputStream fis=new FileInputStream("E:\\a\\ab.txt");
ObjectInputStream ois=new ObjectInputStream(fis);
//独处硬盘中的内容,用Person接受
Person obj = (Person)ois.readObject();
System.out.println(obj.toString());
}
三、打印流
字节打印流(PrintStream)
字符打印流(PrintWriter)
//定义字符输出流
PrintWriter pw = new PrintWriter("E:\\a\\output.txt");
//2,写数据
pw.println("helloWorld");
//3,关闭流
pw.close();
特点:不负责数据源,只负责目的地,可以自动刷新
小结:
IO流这部分学习的东西整体是比较多的,但是重要的是要分清类,找出他们的应用场景具体是什么。根据输入输出、字节字符来分框架,期间加入缓冲流的使用、字节字符之间的互相转换、与集合的融合使用、类实例化后对象的写入以及简便的直接打印输出。总是思路需理清,代码得多敲。