中关村黑马程序员 — 复制文本文件的两种方法


第一种方法通过字符流的两个缓冲区BufferedReader和BufferedWriter来复制文件
  步骤:
        1.创建一个读取流对象new FileReader(fileName)和文件相关联。
        2.创建一个读取流 的缓冲对象new BufferedReader( FileReader); 
        将需要被提高效率的流对象new FileReader(fileName)作为参数传递给缓冲区对象new BufferedReader( FileReader)的构造函数即可。
        3.创建一个字符写入流对象。 new FileWriter(fileName)和文件相关联
        4.创建一个 写入流 的缓冲对像new BufferedWriter(FileWriter );
          将需要被提高效率的流对象new FileWriter(fileName)作为参数传递给缓冲区对象new BufferedWriter( FileWriter )的构造函数即可。
       5.调用读流缓冲区对象new BufferedReader( FileReader)的功能方法readLine()读取文件数据字符, 并用while循环语句来读取文件里的所有数据
       6.分别调用缓冲区对象new BufferedReader( FileReader)的功能方法bufw.write(line),bufw.newline(), bufw.flush()来对文件的数据进行操作
import java.io.*; 
 class Bufferwr 
 { 
 public static void main(String[] args)

{        
    //建立字符输入输出流的引用,便于整个类的使用
       BufferedReader bufr =null;
       BufferedWriter bufw =null;

        try
        {  

             //建立字符输入流,关联文件A.java  进行异常处理
             FileReader fr = new FileReader("A.java");
              bufr =new BufferedReader(fr);

                 //建立字符输出流,关联文件 B.txt   
              FileWriter fw = new FileWriter("B.txt");            
               bufw = new BufferedWriter(fw);   
        // String line = bufr.readLine();
           String line =null;
                      //while循环,把读取的数据存写入到新建文件B.txt   
         while ((line =bufr.readLine())!=null)

         {
             bufw.write(line);
             bufw.newLine();
             bufw.flush();
         }
        }
        catch (IOException e)
        {  
            System.out.println(e.toString());
        //或throw new RuntimeException("缓冲区读写失败异常");
        }
        finally
         {  //  必须要执行的代码,并进行异常处理
              bufr.close()             
             try
             {  if(bufr!=null)
                bufr.close();
             }
             catch (IOException e)
             {
             System.out.println(e.toString());
            //或throw new RuntimeException("缓冲区读流关闭失败异常");
             }

               try
             {  if(bufw!=null)
                bufw.close();
             }
             catch (IOException e)
                System.out.println(e.toString());
            //或throw new RuntimeException("缓冲区写流关闭失败异常");
             }

          }






      FileReader fr = new FileReader("A.java");
    BufferedReader bufr =new BufferedReader(fr);

     FileWriter fw = new FileWriter("B.txt");
     BufferedWriter burw = new BufferedWriter(fw);


    System.out.println("Hello World!");



}
}
第二种方法通过字符流FileWriter和 FileReader复制来文件 
 步骤;1.创建一个new FileWriter(fileName)对象。该对象一被初始化就必须要明确被操作的文件。 
 在相应的目录下会自动建立一个文件fileName2.创建一个文件读取流对象new FileReader(fileName);,和指定名称的文件相关联。此文件fileName 已经预先存在内有数据,如果不存在,FileNotFoundException会发生异常
  3.自定义一个字符数组 char[] buf =new char[1204]。用于存储读到文件fileName的数据字符。
    //该read(char[])返回的是读到字符个数。
   4.调用读取流对象new FileReader(fileName)的功能方法read(char[]) 把读取到的字符都存储到数组里char[],往数组里读取了len次


  5.调用new FileWriter(fileName)对象的功能方法write(char[],off,len) ,把数组中的所欲数据写入流对象 创建的文件里

6.  写入流对象FileWriter fw =new FileWriter("B.txt");读取流对象FileReader fr =new FileReader("A.java");
     中转站数组 char[] buf = new char[1024];public static void main(String[] args) 
 { 
 //建立字符输入输出流 引用 
 FileWriter fw=null; 
 FileReader fr =null; 
 try 
 { 
 //建立字符输入输出流对象 fw fr 并异常处理 
 fw =new FileWriter(“B.txt”); 
 fr =new FileReader(“A.java”); 
 char[] buf = new char[1024];
//int len =fr.read(buf);
        int len =0;
      //while循环  把出数组读取的数据写入到新建文件B.txt里
             while((len = fr.read(buf))=-1)
                {
                 fw.write(char[],0,len);
             }
    }
    catch (IOException e)
    {

              System.out.println(e.toString());
            //或throw new IOException ("写读流失败异常");
    }
    finally
          {
            if(fw!=null)
              //fw.close()是必须执行代码,放在finally{},并进行异常处理   
            try
            {
                fw.close();
            }
            catch (IOException e)
            { System.out.println(e.toString());
            //或throw new IOException ("写流关闭失败异常");
            }

            if(fr!=null)

            try
            {
                    fr.close();
            }
            catch (IOException e)
            { System.out.println(e.toString());
            //或throw new IOException ("读流关闭失败异常");
            }

      }

}