簡體   English   中英

使用Java中的delete()方法刪除文件

[英]File deletion with delete() method in Java

我對以下代碼有點懷疑:

try {
    File file = new File("writing");
    file.createNewFile();
    System.out.println(file.delete());
    System.out.println(file.exists());

    PrintWriter pw = new PrintWriter(file);
    pw.print(324.2342);
    pw.flush();
    pw.close();
    FileReader fr = new FileReader(file);
    BufferedReader br = new BufferedReader(fr);
    System.out.println(br.readLine());
    br.close();
} catch(IOException ioE) {
    System.out.println("Indeed");
}

為什么在這種情況下,方法file.delete()顯然表示它工作,因為它在執行時返回“true”,並且它也被file.exists()方法確認,返回“false”。 但是在運行時我沒有得到任何異常,如“IOException the file”,寫“不存在”或類似的東西。

為什么即使在物理上刪除文件仍保留在堆中? 一旦調用delete方法,它不應該自動被垃圾收集嗎? 我知道它不是因為我看到了輸出。

這是因為File表示一個抽象路徑,請參閱JavaDoc http://docs.oracle.com/javase/6/docs/api/java/io/File.html 它不代表OS中的文件句柄。
代碼中的行:

PrintWriter pw = new PrintWriter(file);

只需創建一個新文件。 嘗試在調用此文件后刪除該文件...

File對象表示文件系統上的物理文件的路徑是否存在。 這就是為什么你有exists() (檢查它是否存在)和createNewFile() (如果找不到則創建文件)。


另請注意, PrintWriter(File file)會創建一個新文件(如果它不存在)。

參數:

file - 要用作此writer的目標的文件。 如果該文件存在,那么它將被截斷為零大小; 否則,將創建一個新文件。 輸出將寫入文件並進行緩沖。

文件是真實文件的句柄(是否存在)。 你正在創建並刪除上面的文件 - 到目前為止一切都很好。

當您稍后來到PrintWriter時,它會在您使用它時再次創建該文件 - 之前刪除它並不重要。

事實上,根據您的使用情況,這可能是您想要的 - 例如,您可能希望刪除舊的日志文件,例如在重新創建並再次寫入之前。

最后,在你的方法存在之前,你的代碼中的任何內容都沒有資格進行垃圾收集,即使這樣,底層文件也將繼續存在(如果你不刪除它) - 並且在這種情況下任何垃圾收集都不會影響底層文件。 它將在刪除調用后刪除,並在PrintWriter完成后再次存在。

希望這可以幫助!

該文件沒有指向特定文件的鏈接,而是指向文件路徑的任何文件指針。 使用此行,您將創建一個新文件:

PrintWriter pw = new PrintWriter(file);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM