黑马程序员_84_IO转换流

来源:互联网 发布:情侣装专卖店品牌淘宝 编辑:程序博客网 时间:2024/05/02 22:54

 ——- android培训、java培训、期待与您交流! ———-

概述

转换流的由来:
字符流与字节流之间的桥梁
方便了字符流与字节流之间的操作

转换流的应用:
字节流中的数据都是字符时,转成字符流操作更高效。

转换流:
InputStreamReader:字节到字符的桥梁,解码。
OutputStreamWriter:字符到字节的桥梁,编码。

InputStreamReader是字节流通向字符流的桥梁。

示例

示例1

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;public class TransStreamDemo{       public static void main(String[] args) throws IOException {             //字节流            InputStream in = System.in;             //将字节转成字符的桥梁,转换流            InputStreamReader isr = new InputStreamReader(in);             //对字符流进行高效装饰,缓冲区            BufferedReader bufr = new BufferedReader(isr);            String line = null;             //读取到了字符串数据             while((line = bufr.readLine()) != null){                   if("over" .equals(line))                         break;                  System.out.println(line.toUpperCase());            }      }}

运行结果图这里写图片描述
小结
使用字节流读取一个中文字符需要读取两次,因为一个中文字符由两个字节组成,而使用字符流只需读取一次。
System.out的类型是PrintStream,属于OutputStream类别。

OutputStreamReader是字符流通向字节流的桥梁。

示例2

import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;public class TransStreamDemo{       public static void main(String[] args) throws IOException {            InputStream in = System.in;            InputStreamReader isr = new InputStreamReader(in);             //字符流            BufferedReader bufr = new BufferedReader(isr);             //字节流,字节数据            OutputStream out = System.out;             //数据到了osw,目的地out控制台            OutputStreamWriter osw = new OutputStreamWriter(out);            BufferedWriter bufw = new BufferedWriter(osw);            String line = null;             while((line = bufr.readLine()) != null){                   if("over" .equals(line))                         break;                   //将字符数据用缓冲区对象将数据写入缓冲区,目的地是osw                  bufw.write(line.toUpperCase());                  bufw.newLine();                   //osw.write(line.toUpperCase() + "\r\n");可以替代上面两行代码                  bufw.flush();            }      }}

运行结果图
这里写图片描述

示例2简化代码

import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;public class TransStreamDemo{       public static void main(String[] args) throws IOException {            BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));            BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));            String line = null;             while((line = bufr.readLine()) != null){                   if("over" .equals(line))                         break;                  bufw.write(line.toUpperCase());                  bufw.newLine();                  bufw.flush();            }      }}

运行结果图
这里写图片描述

练习

练习1

需求:将键盘录入的数据写入到一个文件中。
源码

import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileOutputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.IOException;public class TransStreamDemo{     public static void main(String[] args) throws IOException {          BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));          BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("a.txt")));          String line = null;          while((line = bufr.readLine()) != null){               if("over" .equals(line))                    break;               bufw.write(line.toUpperCase());               bufw.newLine();               bufw.flush();          }     }}

运行结果图
这里写图片描述
这里写图片描述

练习2

需求:将一个文本文件内容显示在控制台上。
源码

import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;public class TransStreamDemo{       public static void main(String[] args) throws IOException {            BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("a.txt")));            BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));            String line = null;             while((line = bufr.readLine()) != null){                   if("over" .equals(line))                         break;                  bufw.write(line.toUpperCase());                  bufw.newLine();                  bufw.flush();            }      }}

运行结果图
这里写图片描述

练习3

需求:将一个文本文件中的内容复制到另一个文件中。

源码

import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;public class TransStreamDemo{       public static void main(String[] args) throws IOException {            BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("a.txt")));            BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("b.txt")));            String line = null;             while((line = bufr.readLine()) != null){                   if("over" .equals(line))                         break;                  bufw.write(line.toUpperCase());                  bufw.newLine();                  bufw.flush();            }      }}

运行结果图
这里写图片描述

0 0
原创粉丝点击