2013-05-22 19 views
6

當創建tempFile時,是否有任何方法來控制附加到文件名的隨機數字? 例如。如果我寫File.createTempFile("abc",".pdf"),它會創建一個名稱爲abc12323543121.pdf的文件。而不是這些數字,是否可以附加一個時間戳?我需要這個,因爲對於我創建的每個文件,我需要將時間戳記附加到文件,這會使文件名稱相當長。所以,如果我可以使用時間戳,而不是隨機生成的數字,那將非常棒。獲得對在Java中創建的臨時文件的名稱的控制

+4

是否有原因將文件創建爲臨時文件而不是正常的方式?這樣你就可以完全控制他們的名字。 – Philipp

+0

'createTempFile()'是可重複使用的,即使您在一秒內調用它1000次,該文件名也是唯一的。它必須能夠添加一些前綴或後綴。 –

+1

@Philipp我最終以正常的方式實現它,但是在系統臨時目錄中,這個目錄或多或少類似於createTempFile方法,但對隨機命名有更多的控制。 – Adarsh

回答

7

看來API並不直接提供此功能。但是你可以看一下File.createTempFile()源代碼,看看它是如何實現的,然後自己實現所需的方法。

基本上,createTempFile()用目標文件名創建一個File對象,然後使用FileSystem.createFileExclusively()來創建該文件。如果文件已經存在,此方法返回false,在這種情況下文件名被修改(通過使用不同的隨機數),並且重試創建。

您可以按照相同的方法,但請注意FileSystem是包私有類,因此您不能在自己的方法中使用它。改爲使用File.createNewFile()以原子方式創建文件。如果文件已經存在,此方法也會返回false,因此您可以在類似的循環中使用它,如createTempFile()使用createFileExclusively()方法。

+1

我已經實現了我自己的方法,根據兩個答案的輸入在臨時目錄中創建一個新文件。謝謝。 – Adarsh

7

您可以創建自己的實用程序創建臨時文件的方法。基本上臨時文件存儲在臨時目錄中,如下所示:

public File createTempFile(String prefix, String suffix){ 
    String tempDir = System.getProperty("java.io.tmpdir"); 
    String fileName = (prefix != null ? prefix : "") + System.nanoTime() + (suffix != null ? suffix : "") ; 
    return new File(tempDir, fileName); 
} 
+1

我使用Andreas提供的解決方案按照您的建議在temp目錄中原子地​​創建一個文件。謝謝。 – Adarsh