天天看點

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

一、錯誤示例1

public void copyfile()

{

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

fr.close(); // ③

fw.close(); // ④

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

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

二、錯誤示例2

char[] charbuffer = new char[1024]; 

if (null != fr)

if (null != fw)

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

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

三、正确示例

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

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

fr.close();

fw.close();