JavaSE-22 Java IO 流 结构图 转换流 InputStreamReader OutputStreamWriter(字节流---字符流)流操作规律

Java IO 流 结构图:https://www.cnblogs.com/cangsir/p/5397619.html

Java流操作有关的类或接口:

字节流的输入与输出的对应

字符流的输入与输出的对应

 

 

InputStreamReader   解码   (看不懂得字节翻译成看得懂字符)

 1.字节流+编码表  2. 内部方法是操作字符的方法。

//字节流-----字符流
public  static   void  inputstreamReader(){

    BufferedReader   br=new BufferedReader(new InputStreamReader(System.in));
    String  str =null;
    while (true){
        try {
            if (((str=br.readLine())!=null))
            System.out.println("读取:"+str );
            if(str.equals("over")) break;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

OutputStreamWriter   编码(看不懂得字符翻译成看得懂字节)

字符流到字节流的转换,关闭流前先刷新

 

FileWriter 的父类 

转换流图解

 public   static   void  outputStreamdemo(){
        BufferedWriter  bw =new BufferedWriter(new OutputStreamWriter(System.out)) ;
        BufferedReader   br=new BufferedReader(new InputStreamReader(System.in));
        String  str =null;
        while (true){
            try {
                 System.out.print(" 请输入:");
                if (((str=br.readLine())!=null))
                   bw.write(str.toUpperCase());//字符流----》字节流
                   bw. newLine();
                   bw.flush();
                if(str.equals("over")) {
                  System.out.println(" 退出");

                  break;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    3.转换流操作  练习

/****
    //需求1 将键盘录入的内容写入到文件中。
    //   1.字节流到字符流的转换: System.in 字节流--->IntputStreamReader--->BufferedReader---String 字符
    //String--- OutputStreamWriter-----BufferedWriter----FileOutputStream-字节流


    ****/
    public  static  void   fileWriter(){
      BufferedReader  br=  new BufferedReader(new InputStreamReader(System.in));
      BufferedWriter   bw=null;
      try{
       bw=  new BufferedWriter(new OutputStreamWriter(new FileOutputStream("字节流.txt")));

      }catch (  FileNotFoundException  e){
          e.printStackTrace();
      }
      String  str=null;
      try{
          while (true){
              System.out.println("请输入:");
        if ((str=br.readLine())!=null){//readLine()  读一行文字。 一行被视为由换行符('\ n'),回车符('\ r')中的任何一个或随后的换行符终止。
          //
            if(str.equals("over")){
                  System.out.println("退出");
                  break;
              }

             bw.write(str);
             bw.newLine();
             bw.flush();
          }
          }

      }catch ( IOException e){
          e.printStackTrace();
      }finally {
          if(bw!=null){
              try {
                  bw.close();
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
          if(br!=null){
              try {
                  br.close();
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
      }
    }
    /**
    //需求2:将一个文本文件显示在控制台上。

     FileinputStream --字节流--> InputStreamReader--字符流-->缓冲区-BufferedReadder--BufferWriter-Sysstem.out
    ***/
    public  static  void   fileReader(){
        BufferedReader  br=  null;
        BufferedWriter   bw=null;
        try{
            bw=  new BufferedWriter(new OutputStreamWriter(System.out));//输出控制台
            try {
                br=   new BufferedReader(new InputStreamReader(new FileInputStream("神回复.txt"),"GB2312"));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }catch (  FileNotFoundException  e){
            e.printStackTrace();
        }
        String  str=null;
        try{
               while((str=br.readLine())!=null){//readLine()  读一行文字。 一行被视为由换行符('\ n'),回车符('\ r')中的任何一个或随后的换行符终止。
                    bw.write(str);
                    bw.newLine();
                    bw.flush();
                }

        }catch ( IOException e){
            e.printStackTrace();
        }finally {
            if(bw!=null){
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(br!=null){
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /***   改变源和目的
     * 需求3.将一个文件的内容复制到另外一个文件。
     * BufferedWriter  bw =new BufferedWriter(new OutputStreamWriter(new FileInputStream("文件1.txt"))) ;
     *BufferedReader   br=new BufferedReader(new InputStreamReader(new  FileOutputStream("文件.txt")));
     *
     * */

流的操作规律:

转换流 

InputStreamReader :字节到字符的桥梁   解码

OutputStreamWriter :字符到字节的桥梁。编码

流操操作的对象太多。明确四个:

1.明确源和目的

源:InputStream  Reader

目的: Outputstream  Writer

2.数据是否是纯文本数据

源: 是纯文本 :Reader   否:InputStream

目的是否是: 纯文本 Writer 否:OutputStream

到这里,可以明确需求中国具体要使用哪个体系。

3.明确具体的设备(对象)

源:硬盘( File) 键盘(System.in ) 内存( 数组)  网络:Socket 流

目的:硬盘   File ,控制台System.out) 内存( 数组)  网络:Socket 流

4.是否需要额外功能:

1.是否需要高效(缓冲区)是: 加上 Buffer  :BufferedWriter   BufferedReader

2.是否需要转换:是 InputStreamReader , OutputStreamWriter.

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值