Day33-Buffered处理流、对象处理流

Day33-Buffered处理流、对象处理流

BufferedReader(字符流)

package com.ghy.reader;

import java.io.BufferedReader;
import java.io.FileReader;

//演示BufferedReader
public class BufferedReader01 {
    public static void main(String[] args) throws Exception{
        //路径
        String filePath = "D:\\code\\LoveStory.txt";
        //创建BufferedReader对象
        BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
        //读取
        String line;//按行读取,效率高
        //当返回null时,说明读取完毕。
        while((line = bufferedReader.readLine())!=null){
            System.out.println(line);
        }
        //关闭流
        //这里只需要关闭BufferedReader就可以了,因为底层会自动的去关闭节点流(FileReader)
        bufferedReader.close();

    }
}

输出

小赵爱情故事。XIAOZHAO喜欢小龚~嘿嘿嘿

BufferedWriter

package com.ghy.reader;

import java.io.BufferedWriter;
import java.io.FileWriter;

//演示BufferedWriter的使用
public class BufferedWriter01 {
    public static void main(String[] args) throws Exception {
        String filePath = "D:\\code\\LoveStory.txt";
        //创建BufferedWriter对象
        //1.new FileWriter(filePath,true)是以追加的方式写入
        //2.new FileWriter(filePath)是以覆盖的方式写入
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath));
        bufferedWriter.write("小赵最厉害!");
        bufferedWriter.newLine();//插入一个换行
        bufferedWriter.write("但是!");
        bufferedWriter.newLine();//插入一个换行
        bufferedWriter.write("小龚当家做主!");
        //关闭流,底层也会自动关闭节点流
        bufferedWriter.close();
        System.out.println("写入成功!");

    }
}

输出

写入成功!

查看

在这里插入图片描述

Buffered(字符流)拷贝

package com.ghy.writer;

import java.io.*;

public class BufferedCopy01 {
    public static void main(String[] args)  {
        String srcPath = "D:\\code\\LoveStory.txt";//原文件路径
        String newPath = "D:\\code\\LoveStory2.txt";//目的路径
        BufferedReader br = null;
        BufferedWriter bw = null;
        String line;
        //创建对象
        try {
            br = new BufferedReader(new FileReader(srcPath));
            bw = new BufferedWriter(new FileWriter(newPath));
            //读取
            while((line = br.readLine()) != null){
                //每读取一行就写入一行
                bw.write(line);
                //插入换行,读取一行换一行
                bw.newLine();
            }
            System.out.println("拷贝成功!");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //关闭bw流
            if(bw!=null){
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            //关闭br流
            if(br!=null){
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

输出

拷贝成功!

查看

在这里插入图片描述

在这里插入图片描述

1.BufferedReader和BufferedWriter是按照字符操作

2.不要操作二进制文件(声音、视屏、word文档…),可能造成文件损坏

Buffered字节处理流

  • BufferedInputStream

在这里插入图片描述

  • BufferedoutputStream

在这里插入图片描述

Buffered(字节流)拷贝

package com.ghy.outputstream;

import java.io.*;

//演示使用BufferedOutPutStream和BufferedInPutStream
public class BufferedCopy02 {
    public static void main(String[] args) {
        String srcPath = "d:\\code\\分島花音 - still doll(オルゴール・ヴァージョン).mp3";//原路径
        String newPath = "d:\\code\\拷贝的歌.mp3";//目的路径
        BufferedOutputStream bo = null;
        BufferedInputStream bi = null;
        //创建对象
        try {
            //
            bi = new BufferedInputStream(new FileInputStream(srcPath));
            bo = new BufferedOutputStream(new FileOutputStream(newPath));
            byte[] buff = new byte[1024];
            int readLen = 0;
            //循环的读取文件,并写入到拷贝文件
            //当返回的是-1时,就表示文件读取完毕
            while ((readLen = bi.read(buff))!=-1){
                //读取多少就写入多少
                bo.write(buff,0,readLen);
            }
            System.out.println("拷贝成功!");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //关闭流,关闭外层的处理流即可,底层会去关闭节点流
            if(bi!=null){
                try {
                    bi.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(bo!=null){
                try {
                    bo.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

输出

拷贝成功!

查看

在这里插入图片描述

对象处理流

在这里插入图片描述

在这里插入图片描述

ObjectOutPutStream

package com.ghy.outputstream;

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

//演示ObjectOutPutStream的使用,完成数据的序列化
public class ObjectOutPutStream01 {
    public static void main(String[] args) throws Exception{
        //序列化后,保存的文件格式,不是纯文本,而是按照他的格式来保存的
        String filePath = "D:\\code\\data.dat";
        ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(filePath));
        //序列化数据到D:\code\data.dat
        os.writeInt(100);//int -> Integer(实现了 Serialiazable)
        os.writeBoolean(true);//boolean->Boolean(实现了 Serialiazable)
        os.writeChar('G');//char->Character(实现了 Serialiazable)
        os.writeDouble(9.11);//double->Double(实现了 Serialiazable)
        os.writeUTF("最爱小赵");//String(实现了 Serialiazable)
        //保存一个xiaozhao对象
        os.writeObject(new xiaozhao("小赵",18));
        //关闭流
        os.close();
        System.out.println("数据保存完毕(序列化型形式)");
    }
}
//如果需要实例化某个类对象,实现接口
class xiaozhao implements Serializable {
    private String name;
    private int age;

    public xiaozhao(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

输出

数据保存完毕(序列化型形式)

查看

在这里插入图片描述

在这里插入图片描述

因为保存的不是文本模式,所以查看的时候有乱码,但是可以看出保存了数据和数据类型

ObjectInPutStream

(进行反序列化恢复文件)

package com.ghy.inputstream;

import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class ObjectInPutStream01 {
    public static void main(String[] args) throws Exception{
        String filePath = "D:\\code\\data.dat";//指定路径文件
        //创建对象
        ObjectInputStream oi = new ObjectInputStream(new FileInputStream(filePath));
        //读取
        //读取顺序要与序列化顺序一致,否则会出现异常
        System.out.println(oi.readInt());
        System.out.println(oi.readBoolean());
        System.out.println(oi.readChar());
        System.out.println(oi.readDouble());
        System.out.println(oi.readUTF());
        //xiaozhao的编译类型是Object,运行类型是xiaozhao
        Object xiaozhao = oi.readObject();
        System.out.println("运行类型=" + xiaozhao.getClass());
        System.out.println("xiaozhao信息=" + xiaozhao);
        //1. 如果我们需要xiaozhao方法需要向下转型
        //2.需要我们将xiaozhao类的定义,拷贝到可以引用的位置
        //关闭流
        oi.close();
    }
}

输出

100
true
G
9.11
最爱小赵
运行类型=class com.ghy.outputstream.xiaozhao
xiaozhao信息=xiaozhao{name='小赵',age=18}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值