黑马程序员技术交流社区

标题: 两种方式有什么根本区别么 求解!! [打印本页]

作者: 孙松林    时间: 2012-10-29 19:46
标题: 两种方式有什么根本区别么 求解!!
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();
                }

        }
}
作者: 崔政    时间: 2012-10-29 19:59
区别好像仅仅是一个是直接创建好对象,一个是先创建引用,然后再指向对象。
因为你的写法是在主函数上直接抛了,如果你是用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. }

复制代码

作者: 刘丽娜    时间: 2012-10-29 20:02
没什么本质区别吧  只是先声明 和后生命的区别吧
作者: 杨千里    时间: 2012-10-29 20:17
我认为:
第一种做法,抛出异常,不处理,有点懒,在开发时,应该处理。
第二种做法,多余,没有多大用处。

我觉得这样做比较合适:
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("文件读取关闭失败");
              }
            }
      }   
}

作者: 孤傲的狼    时间: 2012-10-29 20:22
第二种方式,可以避免出现异常,第一种方法则不会。其他的我就不清楚了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2