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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙松林 注册黑马   /  2012-10-29 19:46  /  1243 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class CopyTextByBufferTest {

        public static void main(String[] args) throws IOException {

                FileReader fr =new FileReader("demo.txt");
                BufferedReader bufr = new BufferedReader(fr);
                FileWriter fw =new FileWriter("copy.txt");
                BufferedWriter bufw = new BufferedWriter(fw);

                String line = null;
                while ((line = bufr.readLine()) != null) {
                        bufw.write(line);
                        bufw.newLine();
                        bufw.flush();
                }

        }
}



-----------------------------------------------------------------------------------------------------------------------------------------------


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class CopyTextByBufferTest {

        public static void main(String[] args) throws IOException {

                FileReader fr = null;
                BufferedReader bufr = null;
                FileWriter fw = null;
                BufferedWriter bufw = null;

                fr = new FileReader("demo.txt");
                bufr = new BufferedReader(fr);

                fw = new FileWriter("copy.txt");
                bufw = new BufferedWriter(fw);

                String line = null;
                while ((line = bufr.readLine()) != null) {
                        bufw.write(line);
                        bufw.newLine();
                        bufw.flush();
                }

        }
}

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

4 个回复

倒序浏览
区别好像仅仅是一个是直接创建好对象,一个是先创建引用,然后再指向对象。
因为你的写法是在主函数上直接抛了,如果你是用trycatch你就看出区别了
  1. package day19;
  2. import java.io.*;

  3. public class Test2 {

  4.         public static void main(String[] args) {
  5.                 FileReader fr = null;
  6.         BufferedReader bufr = null;//因为创建的时候可能会抛出异常,所以先null,这样是没问题的
  7.         FileWriter fw = null;
  8.         BufferedWriter bufw = null;
  9.         try{
  10.                 fr = new FileReader("demo.txt");
  11.                 bufr = new BufferedReader(fr);

  12.                 fw = new FileWriter("copy.txt");
  13.                 bufw = new BufferedWriter(fw);

  14.                 String line = null;
  15.                 while ((line = bufr.readLine()) != null) {
  16.                 bufw.write(line);
  17.                 bufw.newLine();
  18.                 bufw.flush();
  19.                 }
  20.         }catch(IOException e)
  21.         {
  22.                 throw new RuntimeException("复制文件出错!");
  23.         }finally{
  24.                 //因为BufferedReader和BufferedWriter必须要关闭,所以放在finally里边
  25.                 try{
  26.                         bufr.close();//如果你用的是直接new对象,引用在try块里边,在finally无法用到bufr,bufw同理
  27.                 }catch(IOException e1){
  28.                         throw new RuntimeException("读取关闭失败");
  29.                 }
  30.                 try{
  31.                         bufw.close();
  32.                 }catch(IOException e1){
  33.                         throw new RuntimeException("写入关闭失败");
  34.                 }
  35.                
  36.         }


  37. }
  38. }

复制代码
回复 使用道具 举报
没什么本质区别吧  只是先声明 和后生命的区别吧
回复 使用道具 举报
我认为:
第一种做法,抛出异常,不处理,有点懒,在开发时,应该处理。
第二种做法,多余,没有多大用处。

我觉得这样做比较合适:
package java_9_1;
import java.io.*;
public class CopyTextByBufferTest {
    public static void main(String[] args){
            //FileReader fr = null;
            //FileWriter fw = null;
            
            BufferedReader bufr = null;
            BufferedWriter bufw = null;
            
            try{
             //fr = new FileReader("F:\\io\\demo.txt");
            
             bufr = new BufferedReader(new FileReader("F:\\io\\demo.txt"));

             //fw = new FileWriter("F:\\io\\copy.txt");
             bufw = new BufferedWriter(new FileWriter("F:\\io\\copy.txt"));

             String line = null;
             while ((line = bufr.readLine()) != null) {
                     bufw.write(line);
                     bufw.newLine();
                     bufw.flush();
                }
            }catch(IOException e){
             throw new RuntimeException("文件copy失败");
            }
            finally{
            
             //finally 区域:一定要执行的代码,通常是用在关闭资源。 关闭资源之前应该判断一下,该资源存在不存在。如果不存在,会发生异常。
             if(bufw!=null)
              try{
               bufw.close();
              }catch(IOException e){
               throw new RuntimeException("文件写入关闭失败");
              }
            
             if(bufr!=null)
              try{
               bufr.close();
              }catch(IOException e){
               throw new RuntimeException("文件读取关闭失败");
              }
            }
      }   
}

评分

参与人数 1黑马币 +1 收起 理由
孙松林 + 1 很给力!

查看全部评分

回复 使用道具 举报
第二种方式,可以避免出现异常,第一种方法则不会。其他的我就不清楚了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马