IO—转换流和键盘录入

简单来说,由于方法的局限性和功能的需要,特此产生了转换流。

InputStreamReader是字节流转换字符流的桥梁,为了提高效率,可以在缓冲区中放入转化流的对象,,并且构造函数第二个参数可以传入一个指定字符编码

读入键盘录入并打印控制台:

InputStream is = System.in;
        BufferedReader bufr = null;
        InputStreamReader inr = null;
        try {
            inr = new InputStreamReader(is,"UTF-8");
            bufr = new BufferedReader(inr);
            String str = null;
            char []ch = new char[1024];
            while((str = bufr.readLine())!=null) {
                System.out.println(str.toUpperCase());
            }
        }catch(IOException e) {
            e.printStackTrace();
        }catch(Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if(bufr!=null)bufr.close();
                if(inr!=null)inr.close();
            }catch(IOException e) {
                e.printStackTrace();
            }
            
        }

效果如图

OutPutStreamWriter是字符流通向字节流的桥梁:第二个参数同样可以指定一个字符编码

    FileOutputStream fos = null;
        OutputStreamWriter otw = null;
        BufferedWriter bufw = null;
        try {
            fos = new FileOutputStream("D:\\xiaofei1.txt");
            otw = new OutputStreamWriter(fos,"UTF-8");
            bufw = new BufferedWriter(otw);
            bufw.write("我爱中国");
            bufw.flush();
            bufw.write("我是中国人");
        }catch(IOException e) {
            e.printStackTrace();
        }catch(Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if(bufw!=null)bufw.close();
            }catch(IOException e) {
                e.printStackTrace();
            }
        }

 

转换流可以指定字符编码,只有BufferedReader的ReaderLine()方法读到末尾的返回值是null,别的read()方法都是读到末尾返回-1,具体用哪个看后缀

流操作的规律:

  1. 明确源和目的
    1. 源:输入流    InputStream   Reader
    2. 目的:输出流   OutputStream   Writer
    3. 操作的数据是否是纯文本
      1.   是:字符流
      2.        不是:字节流

    2.明确体系后要明确具体的使用的对象

    1. 源设备:内存    硬盘   键盘  
    2. 目的设备:内存  硬盘   控制台   

实例:将一个文本文件数据存储到另一个文件中:复制文件

  明确体系:

    源:文件---读取流------inputStream和Reader

    是否是纯文本:是------Reader

    目的:文件---写入流-------OutputOutputStream和Writer

    是否是纯文本:是:writer

  明确设备:

    源:Reader

    设备:硬盘上一个文件---子类对象:FileReader

      FileReader fr = new FileReader("D:xiaofei.txt");

    是否要提高效率:是-------加入Reader中的缓冲区:BufferedReader

      BufferedReader br = new BufferedReader(fr);

    目的:硬盘上的一个文件:子类对象:FileWriter

      FileWriter fw = new FileWriter("D:\\xiaofei1.txt");

    是否要提高效率:是--------加入Writer缓冲区BufferedWriter

      BufferedWriter bufw = new BufferedWriter(fw);

----------看《毕向东java》笔记

 

posted @ 2019-10-10 09:15  James_Harden  阅读(143)  评论(0编辑  收藏  举报