2014-09-02 64 views
0

我有一個Java應用程序,我使用javaMail API發送由其他實用程序Java類生成的附件。 有沒有什麼辦法可以創建一個臨時文件夾,在使用java 1.6版本發送之前保存這些附件?如何在使用java 1.6的Java應用程序內創建臨時目錄?

+1

如果您的其他實用程序完全有能力寫入OutputStream,我會避免創建任何文件(在內存中執行所有操作)。您可以使用ByteArrayOutputStream捕獲輸出數據並直接從那裏創建附件。 – Durandal 2014-09-02 16:27:43

回答

1

您可以使用File.createTempFile來創建臨時目錄(取決於您的平臺)的臨時文件,但無法以類似的方式創建臨時目錄。

您應該修改生成代碼以創建臨時文件,然後傳遞File對象。

+0

方法名稱是createTempFile – 2014-09-02 15:38:08

0

Google Guava有一個Files.createTempDir()方法,解釋爲here

/** Maximum loop count when creating temp directories. */ 
    private static final int TEMP_DIR_ATTEMPTS = 10000; 

public static File createTempDir() { 
    File baseDir = new File(System.getProperty("java.io.tmpdir")); 
    String baseName = System.currentTimeMillis() + "-"; 

    for (int counter = 0; counter < TEMP_DIR_ATTEMPTS; counter++) { 
     File tempDir = new File(baseDir, baseName + counter); 
     if (tempDir.mkdir()) { 
      return tempDir; 
     } 
    } 
    throw new IllegalStateException("Failed to create directory within " + TEMP_DIR_ATTEMPTS + " attempts (tried " + baseName + "0 to " + baseName + (TEMP_DIR_ATTEMPTS - 1) + ')'); 
} 
0

標準的方法是創建一個臨時文件,然後刪除它,然後重新創建一個目錄。例如,這是JUnit的TemporaryFolder規則是怎麼做的:

File folder= File.createTempFile("junit", ""); 
    folder.delete(); 
    folder.mkdir(); 

然而,這不是線程安全的,因爲別的東西可以創建在delete()mkdir()調用之間的時間相同的文件,這將導致該代碼失敗。