2011-08-19 116 views
4

我經歷了一個java教程,該教程允許我創建一個文本文件並在其中寫入「20 Bruce Wayne」。在主類中調用的最後一個方法名爲closeFile(),它在創建後「關閉」文本文件。用Layman的術語解釋Java中的close()方法

爲什麼文件需要「關閉」,如果我沒有真正打開它?通過「打開」,我的意思是記事本編輯器(不是我使用的IDE)彈出「20 Bruce Wayne」這個詞。請用外行人的條件回答我的問題。

Main.java:

class apple { 
    public static void main(String[] args) 
    { 
     createfile g = new createfile(); 
     g.openFile(); 
     g.addRecords(); 
     g.closeFile(); 
    } 
} 

createfile.java

回答

9

當一個文件被 「打開」 的OS標記爲鎖定,一般所以它不能被刪除的文件其他進程正在被使用。 x.close()解除鎖定,允許操作系統和其他進程根據文件所需執行操作。

+3

如果我不使用.close(),其他事情可能會出錯? – user701510

+2

@ user701510:根據您在後臺以及操作系統中使用的存儲空間,某些事情可能會出錯。從不關閉文件可能會導致在操作系統中達到最大數量的打開文件句柄。某些存儲系統可能只會將文件刷新到磁盤,如果關閉它的話...... – home

+0

在某些操作系統中,如果您不關閉文件,則指針位於內存中,如果不是包含整個文件的內存,則不會回到你重新啓動。 –

5

除了售罄活動人士的回答,當您使用I/O操作(例如文件)時,您正在使用流將文本添加到文件或從文件中提取文本。當您退出程序時,此流必須關閉,方法close(),因爲您可能會丟失數據。這就像一個保存操作,如果你不保存你的文件(關閉流),你將失去對文件進行的更改。

看到這個example,和this

+1

沖洗流是什麼意思? – user701510

+2

Flush()是一種允許您卸載流的方法。出於效率原因,您將刷新一個流,因爲,例如,如果您正在文件中寫入一行,則此行會被緩存,放在緩衝區中並刷新流,此行會立即寫入文件和緩衝區中正在使用將被清理,準備接收其他數據。通常,當您調用close()時,您都調用flush()來清理緩衝區,寫入數據並關閉流。有關這些方法的更多信息,請參閱:http://download.oracle.com/javase/6/docs/api/java/io/OutputStream.html –

1

用於關閉在寫模式下打開的文件,因爲爲了減少/使我們的數據安全我們使用close()方法 並且它拋出異常(java.io.IOEXCEPTION)爲什麼意味着任何方法調用尊重對象,因爲它是公共無效close(),這意味着它是實例,所以它是與對象的尊重,所以在某些時候有可能獲得對象得到null任何方法調用相對於空引用,然後它得到NullPointerException所以這是代碼 代碼在finally塊意味着我們打開的所有文件,並最終放棄所有文件塊在最後的塊