选择流的规律 1 首先我们要明确源和目的 源: InputStream Reader 目的::OutputStream Write 2 我们要判断源和目的是不是纯文本 源是纯文本 :Reader 否则 :InputStream 源不是纯文本 Writer 否则:OutputStream 3 明确具体设备 源设备 键盘 System.in 网络 Socket 内存 数组 硬盘 File 目的设备 控制台 System.out 硬盘 File 内存数组 网络 Socket 4 是否需要额外功能 需要高效(缓冲区):Buffered 下面我们举出四个例子来说明 一 复制一个文本文件 源:文本 Reader 目的 文本 Write 源是硬盘 目的也是硬盘 FileReader fr = new FileReder(“a.txt”); FileWriter fw = new FileWriter(“Copy_a.txt”); 是否需要高效(加入缓冲区) BufferedReader bfr = new BufferedReader (new FileReder(“a.txt”)); BufferedWriter bfr = new BufferedWriter (new FileWriter(“Copy_a.txt”)); 二 读取键盘录入信息并且写到一个文件里面 源 文本 Reader 目的 文本 Writer 源是在键盘 目的是硬盘 但是考虑到是文本我们九不需要在用字节读取 直接 //字节流 InputStream is = System.in; 我们对其进行字符流转换 InputStreamReader isr = new InputStreamReader(is); 我们写到文本里面 FileWriter fw = new FileWriter(“b.txt”); 当我们需要高效的时候我们直接这样写 BufferedReader bfr = new BufferedReader(new InputStreamReader (System.in)); BufferedWriter bfr = new BufferedWriter (new FileWriter(“Copy_a.txt”)); 三 将一个文本文件里面的数据显示到控制台上 源 文本 Reader 目的 文本 Writer 源是在硬盘 目的实在控制台 FileReader fr = new FileReader(“a.txt”); OutputStream os = System.out; 因为读取的是文本文件 所以我们为了更加的方便 我们将它转换成为字符流 OutputStreamWriter osr = new OutputStreamWriter(new OutputStream(System.out)); 我们还要考虑是否需要高效 BufferedReader bfr = new BufferedReader(new FileReader(“a.txt”)); BufferedWriter Bfw = new BufferedWriter(newOutputStreamWriter(newOutputStream(System.out))); 四 读入键盘内容然后写到控制台上 源 文本 Reader 目的 文本 Writer 源是在键盘 目的实在控制台 InputStream is = System.in; OutputStream os = System.out 因为键盘上输入的是文本(为了方便起见我们要转换成为字符流)(可以不转) InputStreamReader isr = new InputStreamReader(is); OutputStreamWriter osr = new OutputStreamWriter(osr); 为了高效 我们可以加上Buffered BufferedReader bfr = new BufferedReader(isr); BufferedWriter bfw = new BufferedWriter(osr); 5将一个字符串文本用指定的编码表写到文件里面 使用转换流的另外一个构造函数 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("menghao2.txt"),"UTF-8"); osw.write("你好"); osw.close(); 读的时候同理 InputStreamReader isr = new InputStreamReader(new FileInputStream("menghao2.txt"),"Utf-8"); char a[] = new char[1024]; int len = 0; while((len = isr.read(a)) != -1) { System.out.println(new String(a,0,len)); } isr.close();