Java I/O流(Buffered处理流)(2)

节点流和处理流

节点流:可以从一个特定的数据源(文件,数组,管道等)读写数据,如FileReader,FileWriter。(直接操作数据源,所以比较底层的,功能不是很强大)

处理流(也叫包装流):“链接”在已存在的流(节点流或处理流)之上,为程序提供了更为强大的读写功能,如BufferedReader,BufferedWriter。(对节点流进行包装,功能更加强大,而且更加加灵活)-->这种模式叫做修饰器模式

 例:BufferedReader类中,有属性 Reader in;,即可以封装一个节点流,该节点流是任意的,只要是Reader子类。

处理流的功能:1.性能的提高:主要以增加缓冲的方式来提高输入输出的效率。 2.操作的便携:处理流可能提供了一系列便捷的方法来一次输入输出大量的数据,使用更加灵活方便。

当我们关闭包装流时,他的底层会自动关闭我们这个包装流中的节点流。

什么是二进制文件:图片,音频,视频等都是二进制文件,用字符流进行操作会造成文件的损害。

BufferedReader

readLine()方法按行读取,效率高

 public static void main(String[] args){

        String filepath="D:\\file-study\\story.txt";
        BufferedReader bufferedRead=null;

        try {
            //创建bufferedReader
            bufferedRead = new BufferedReader(new FileReader(filepath));
            //读取
            //readLine()按行读取,效率高
            //当返回为null时,表示文件读取完毕
            String str;
            while((str = bufferedRead.readLine())!=null){
                System.out.println(str);
            }

        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            try {
                //关闭流,只需要关闭BufferedReader,因为底层会自动自动关闭节点流
                bufferedRead.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

    }

BufferedWriter

    public static void main(String[] args) {
        String filepath="D:\\file-study\\buffered.txt";
        BufferedWriter bufferedWriter=null;

        try {
            bufferedWriter=new BufferedWriter(new FileWriter(filepath,true));
            bufferedWriter.write("Hello,沈宇诚");
            //插入一个换行
            bufferedWriter.newLine();
            bufferedWriter.write("Hello,沈宇诚1");
            bufferedWriter.newLine();
            bufferedWriter.write("Hello,沈宇诚2");
            bufferedWriter.newLine();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            try {
                bufferedWriter.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }

使用BufferedReader和BufferedWriter实现Copy

    public static void main(String[] args) {
        String readpath="D:\\file-study\\buffered.txt";
        String writepath="D:\\file-study\\buffered-copy.txt";
        BufferedReader bufferedReader=null;
        BufferedWriter bufferedWriter=null;
        String line;
        try {
            bufferedReader=new BufferedReader(new FileReader(readpath));
            bufferedWriter=new BufferedWriter(new FileWriter(writepath));
            while((line=bufferedReader.readLine())!=null){
                //每读入一行,写入一行
                bufferedWriter.write(line);
                //插入换行
                bufferedWriter.newLine();
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            try {
                bufferedReader.close();
                bufferedWriter.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }

用BufferedInputStream和BufferedOutputStream拷贝图片(二进制文件)

要熟练inputStream读取的方法

    public static void main(String[] args) {

        String readpath="D:\\file-study\\study.jpg";
        String writepath="D:\\file-study\\study-copy.jpg";
        BufferedInputStream bufferedInputStream=null;
        BufferedOutputStream bufferedOutputStream=null;
        byte[]buff=new byte[1024];
        int dataLen=0;
        try {
            bufferedInputStream=new BufferedInputStream(new FileInputStream(readpath));
            bufferedOutputStream=new BufferedOutputStream(new FileOutputStream(writepath));
            while((dataLen=bufferedInputStream.read(buff))!=-1){
                bufferedOutputStream.write(buff,0,dataLen);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            //关闭流
            try {
                bufferedInputStream.close();
                bufferedOutputStream.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值