A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小罴孩 中级黑马   /  2013-7-30 09:36  /  1107 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

输入输出是相对于java虚拟机来说的,数据流向虚拟机是输入流(输入数据到虚拟机中),反之输出流。
字节流与字符流的区别,实际上字节流在操作时本身不会用到缓冲区(内存),是一个字节一个字节地读取文件,是文件本身直接操作的。字符流在操作时使用了缓冲区,通过缓冲区再操作文件,即先在内存中定义一个缓冲区(比如一个长度为1024的字符数组),读取文件时也是一个一个地把文件中的每一个字节都暂时存在这个字符数组里,直到数组被存满位置或者文件内容读完为止,再把该字符数组里的数据一并写入文件中,结合copyBuffer方法来看会容易理解一些。
import java.io.*;

public classWriterReadDemo {
   public static void copyByte(){
      FileReader fr = null;
      FileWriter fw = null;
      int in = 0;
      int i = 0;
      try {
         fr = newFileReader("D:\\test.txt");
         fw = newFileWriter("D:\\test1.txt");
         while((in=fr.read())!=-1){
            i++;
            fw.write(in);
         }
      } catch(IOException e) {
         System.out.println("创建文件失败!");
      } finally{
         try {
            //关闭输入输出流
            fr.close();
            fw.close();
         } catch(IOException e) {
            e.printStackTrace();
         }
      }
      System.out.println("copyByte循环的次数为:"+i);
   }
  
   //设置一个缓冲区,该缓冲区为字符数组ch[],缓冲区存满了再写入
   public static void copyBuffer() {
      FileReader fr = null;
      FileWriter fw = null;
      //建立一个缓冲字符数组区,大小为1024个字节即2K
      char[] ch = new char[1024];
      int in = 0;
      int i = 0;
      try {
         fr = newFileReader("D:\\test.txt");
         fw = newFileWriter("D:\\test2.txt");
         while((in=fr.read(ch))!=-1){
            i++;
            fw.write(ch);
         }
      } catch(IOException e) {
         System.out.println("创建文件失败!");
      }finally{
         try {
            //关闭输入输出流
            fr.close();
            fw.close();
         } catch(IOException e) {
            e.printStackTrace();
         }
      }
      System.out.println("copyBuffer循环的次数为:"+i);
   }
   public static void main(String[] args) throws IOException {
      copyByte();
      copyBuffer();
   }
}

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 最好不要一下发好几个帖

查看全部评分

1 个回复

倒序浏览
您需要登录后才可以回帖 登录 | 加入黑马