java IO流四:带有缓冲区的流

带有缓冲区的流:

字节:
BufferedInputStream;
BufferedOutputStream;
字符:
BufferedReader; 带有缓冲区的字符输入流
BufferedWriter; 带有缓冲区的字符输出流

注:接下来以其中一组为例说明

节点流示意图

在这里插入图片描述

包装流示意图

在这里插入图片描述

BufferedReader:带有缓冲区的字符输入流

package com.company01.IO;

import java.io.*;

/*
    字节:
    BufferedInputStream;
    BufferedOutputStream;
    字符:
    BufferedReader;  带有缓冲区的字符输入流
    BufferedWriter;  带有缓冲区的字符输出流
*/
public class BufferedReaderTest01 {
    public static void main(String[] args) throws Exception{

        /*
        // 创建一个带有缓冲区的字符输入流
        FileReader fr = new FileReader("text01.txt");  // 创建一个文件输入流
        BufferedReader br = new BufferedReader(fr);  // 将文件字符输入流包装成带有缓冲区的字符输入流

        // 根据流出现的位置,流又可以分为:包装流或者处理流 和 节点流
        // FileReader fr 是一个节点流
        // BufferedReader br 是一个包装流,或者处理流

        */

        // 可以合写成一句话
        BufferedReader br = new BufferedReader(new FileReader("test01.txt"));

        // 开始读
        String temp = null;
        while((temp = br.readLine())!= null){  // br.readLine()方法读取一行,但是行尾不带换行符
            System.out.println(temp);
        }

        // 关闭
        // 注意:关闭的时候只需要关闭最外层的包装流。(这里有一个装饰者模式)
        br.close();
    }
}

package com.company01.IO;

import java.io.*;

public class BufferedReaderTest02 {
    public static void main(String[] args) throws Exception{

        // 需求:创建一个带有缓冲区的字符输入流,但是这里只有一个不带缓冲区的字节输入流
        // 字节输入流
        FileInputStream fi = new FileInputStream("test01.txt");  // 文件字节输入流

        // 转换流(将字节流转换成字符流)
        // isr 相对于 fi而言是包装流,fi是节点流
        InputStreamReader isr = new InputStreamReader(fi); // isr 是字符流

        // 带缓冲区的字符流
        // br 相对于 isr而言是白装流,isr是节点流
        BufferedReader br = new BufferedReader(isr);

        // 也可以合成一句话
        // BufferedReader = new BufferedReader(new InputStreamReader(new FileReader("test01.txx")));

        // 开始读
        String temp = null;
        while((temp=br.readLine()) != null){
            System.out.println(temp);
        }

        // 关闭  关闭的时候只需要关闭最外层的包装流。(这里有一个装饰者模式)
        br.close();
    }
}

package com.company01.IO;
/*
    接受用户输入: Scanner;
*/
import java.io.*;
import java.util.Scanner;

public class BufferedReaderTest03 {
    public static void main(String[] args) throws Exception{
        /*
        // 以前的方式
        Scanner s = new Scanner(System.in);  // System.in是一个标准的输入流,默认接受键盘的输入

        // 程序执行到此处停下来,等待用户的输入
        String str= s.next();  // 以空格作为结束  输入:Hello World!  在控制栏上打印:Hello

        System.out.println("您输入了:" + str);

        */

        // 使用BufferedReader用来接受用户的输入
        // BufferedReader()里面不能直接跟System.in
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 接受输入(每一次都接受一行)
        String str = br.readLine();

        System.out.println("您输入了:" + str);

        // 关闭
        br.close();
    }
}

BufferedWriter:带有缓冲区的字符输出流

package com.company01.IO;
/*
    BufferedWriter
*/
import java.io.*;

public class BufferedWriterTest01 {
    public static void main(String[] args) throws Exception{

        // 创建带有缓冲区的字符输出流
        BufferedWriter bw = new BufferedWriter(new FileWriter("test03.txt"));

        // 开始写
        bw.write("奥运会!");

        // 写入一个行分隔符 两种方法都行
        bw.write("\n");

        bw.newLine();

        // 刷新
        bw.flush();

        // 关闭
        bw.close();
    }
}

package com.company01.IO;
/*
    使用BufferedReader和BufferedWriter完成复制
*/
import java.io.*;

public class BufferedWriterTest02 {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new FileReader("test01.txt"));
        BufferedWriter bw = new BufferedWriter((new OutputStreamWriter(new FileOutputStream("test03.txt"))));

        String temp = null;
        while((temp = br.readLine()) != null){  // br.readLine()不带有换行符
            bw.write(temp);
            bw.newLine();
        }

        bw.flush();
        bw.close();
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值