2012-04-28 56 views
4
import java.io.FileReader; 

public class SimpoTest { 

    public static void main(String[] args) { 
     FileReader fileReader = null; 
     try { 
      fileReader = new FileReader("/home/brian/Desktop/me"); 
      int read = fileReader.read(); 
      System.out.println((char) read); 
     } catch (Exception e) { 
      fileReader = null; 
      e.printStackTrace(); 
     } 
    } 
} 

1 \ echo「1」>/home/brian/Desktop/me
2 \將斷點設置爲「int read = fileReader.read();」
3 \開始調試
4 \ rm -f/home/brian/Desktop/me
5 \跳到結尾< ========仍然在控制檯上輸出「1」.. 。

手動刪除後,文件內容仍然可以被讀出?

好吧......這對我來說真的很奇怪。因爲我雖然應該拋出異常。 任何人都可以給出任何解釋? 任何意見或建議表示讚賞。

回答

2

這是預期的行爲,至少在一個類Unix操作系統上:只要有一個打開的文件描述符,rm'd文件的塊將保持分配,並通過該文件描述符訪問。

但我希望你不能通過刪除的文件名向他們打開一個新的文件描述符。

+0

完全如您所說,我在另一個JVM中運行我的代碼,並看到我期望的異常。謝謝克里斯。感謝osaur – 2012-04-29 03:12:43

4

在大多數類Unix系統上,文件的數據保留在磁盤上,直到所有引用都消失;這包括路徑名(硬鏈接)和打開的文件句柄。

+0

,它確實有幫助。 – 2012-04-28 02:22:44

相關問題