IO流学习(下)

1、 对象流

ObjectInputStream、ObjectOutputStream
为什么需要对象流,因为我们要保存一个Person对象到文件中,还要可以从文件中获取这个对象

Person("lwd",10)

序列化和反序列化
序列化:将数据类型和数据值保存下来
反序列化:恢复数据的值和数据类型

Serializable接口:

类的序列化由实现java.io.Serializable接口的类启用。 不实现此接口的类将不会使任何状态序列化或反序列化。 可序列化类的所有子类型都是可序列化的。 序列化接口没有方法或字段,仅用于标识可串行化的语义。

1.1 ObjectOutputStream

如果一个类的对象需要序列化,这个类需要实现Serializable

public class Person implements Serializable {
	//序列化的版本号,目的是为了提高兼容性    
    private static final long serialVersionUID = 1L;

    private String name;
    
    ...构造器,getset...
}
        //序列化后的文件格式不是文本
        String filePath = "data";
        ObjectOutputStream ops = null;
        try{
            ops = new ObjectOutputStream(new FileOutputStream(filePath));
            ops.writeInt(24);
            ops.writeDouble(500);
            ops.writeObject(new Person("lwd",24));
            ops.writeObject(new Person("zhh",19));
        }finally {
            ops.close();
        }

1.2 ObjectInputStream

        String filePath = "data";
        ObjectInputStream ois = null;
        try{
            //反序列化的顺序要与序列化的顺序一致
            ois = new ObjectInputStream(new FileInputStream(filePath));
            System.out.println(ois.readInt());
            System.out.println(ois.readDouble());
            Person person = (Person) ois.readObject();
            Person person1 = (Person) ois.readObject();
            System.out.println(person);
            System.out.println(person1);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            ois.close();
        }

2、转换流

2.1 InputStreamReader

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

InputStreamReader 继承于Reader属于字符流

        InputStreamReader isr;
        BufferedReader bfr = null;
        try {
            isr = new InputStreamReader(new FileInputStream("news.txt"));
            //为了提高效率,在使用缓冲流包装
            bfr = new BufferedReader(isr);
            //返回文件的编码
            String encoding = isr.getEncoding();
            System.out.println(encoding);

            String line = "";
            while ((line = bfr.readLine()) != null){
                System.out.println(line);
            }
        }finally {
        //关闭外层流
            bfr.close();
        }

2.2 OutputStreamWriter

在这里插入图片描述
在这里插入图片描述

        OutputStreamWriter osw;
        BufferedWriter bfw = null;
        try {

            osw = new OutputStreamWriter(new FileOutputStream("goodsList"), StandardCharsets.UTF_8);
            bfw = new BufferedWriter(osw); 
            osw.write("bill of goods: candy ......");
        }finally {
            bfw.close();
        }

3、Properties

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
读取

        //创建properties对象
        Properties properties = new Properties();
        //加载mysql.properties文件
        properties.load(new FileInputStream("mysql.properties"));
        //获取username属性的值
        String user = properties.getProperty("username");
        System.out.println(user);
    }

更改写入

        //创建properties对象
        Properties properties = new Properties();
        //保存键值对
        properties.setProperty("username","lwd");
        //设置保存的文件名和注释
        //这是覆盖之前的内容
        properties.store(new FileOutputStream("mysql.properties"),"数据库连接");

		//追加内容
		//properties.store(new FileOutputStream("mysql.properties",true),"数据库连接");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值