天天看點

Java的IO操作中關閉流的注意點

一、錯誤示例1

public void fileCopy()

{

 FileReader fr = null;

 FileWriter fw = null;

 try

 {

  fr = new FileReader("c:\\xy1.txt"); // ①

  fw = new FileWriter("c:\\xy2.txt"); // ②

  char[] charBuffer = new char[1024];

  int len = 0;

  while ((len = fr.read(charBuffer)) != -1)

  {

   fw.write(charBuffer, 0, len);

  }

  System.out.println("檔案複制成功");

 }

 catch (IOException e)

  throw new RuntimeException("檔案拷貝操作失敗");

 finally

  try

   fr.close(); // ③

   fw.close(); // ④

  catch (IOException e)

   throw new RuntimeException("關閉失敗");

}

若①中代碼出錯,fr根本就沒有初始化,執行③的時候就會報空指針異常。②④同樣是這個道理。

二、錯誤示例2

  char[] charBuffer = new char[1024]; 

   if (null != fr)

   {

    fr.close(); // ③

   }

   if (null != fw)

    fw.close(); // ④

   throw new RuntimeException("關閉失敗"); // ⑤

加上是否為空的判斷可以避免空指針異常。但是如果③執行出錯,程式會直接進入⑤而④根本沒有得到執行,導緻無法關閉。

三、正确示例

  fr = new FileReader("c:\\xy1.txt");

  fw = new FileWriter("c:\\xy2.txt");

    fr.close();

    fw.close();

本文轉自IT徐胖子的專欄部落格51CTO部落格,原文連結http://blog.51cto.com/woshixy/1394707如需轉載請自行聯系原作者

woshixuye111