2011-02-18 116 views
1

我在這裏發現了一些用於在Java中創建臨時目錄的代碼。刪除臨時目錄

public static File createTempDirectory() throws IOException 
{ 
    final File temp; 
    temp = File.createTempFile("temp", Long.toString(System.nanoTime())); 

    if(!(temp.delete())) 
    { 
     throw new IOException("Could not delete temp file: " + temp.getAbsolutePath()); 
    } 
    if(!(temp.mkdir())) 
    { 
     throw new IOException("Could not create temp directory: " + temp.getAbsolutePath()); 
    } 
    return temp; 
} 

如何在我的servlet的生命結束時處理這個臨時目錄並刪除它?

+0

如何保持對它的靜態引用? – Matten 2011-02-18 09:57:25

回答

4

第一:

不要使用創建一個臨時目錄中的這個方法! 這是不安全的!改爲使用Guava方法Files.createTempDir()(或者如果您不想使用Guava,請手動重新實施)。究其原因,在其JavaDoc中描述:

一個常見的錯誤是調用createTempFile,刪除該文件並創建它的位置的目錄,但是這將導致其可以被利用來創造安全漏洞的競爭條件,特別是當可執行文件將被寫入目錄中。

關於你的真正問題:

您需要手動刪除該目錄,這意味着你需要跟蹤你創建(例如在Collection<File>)所有的目錄,並刪除它們時,你肯定知道他們不再需要。