2013-05-22 31 views
6

一時ファイルが作成されたときにファイル名に追加される乱数を制御する方法はありますか? たとえば、 File.createTempFile("abc",".pdf")と書くと、名前がabc12323543121.pdfのファイルが作成されます。これらの数字の代わりにタイムスタンプを付けることは可能ですか?私はこれを必要とするのは、私が作成したすべてのファイルに対して、タイムスタンプをファイルに追加する必要があり、ファイル名がかなり長くなるからです。だから、ランダムに生成された数字の代わりに、私がちょうどタイムスタンプを使うことができれば、本当に素晴らしいでしょう。Javaで作成された一時ファイルの名前を制御する

+4

通常の方法ではなく、一時ファイルとしてファイルを作成する理由はありますか?そうすれば、あなたは自分の名前を完全にコントロールすることができます。 – Philipp

+0

'createTempFile()'は、1秒間に1000回呼び出したとしても、このファイル名を一意にするためにresposibleです。接頭辞や後置詞を追加できる必要があります。 –

+1

@Philipp通常の方法で実装しましたが、システムの一時ディレクトリ(createTempFileメソッドに多少似ていますが、ランダムな命名規則をより詳細に制御します)で実装しました。 – Adarsh

答えて

7

APIはこれを直接提供していないようです。しかし、File.createTempFile()ソースコードを見て、どのように実装されているかを見てから、必要なメソッドを自分で実装することができます。

基本的にcreateTempFile()は、目的のファイル名でFileオブジェクトを作成し、FileSystem.createFileExclusively()を使用してファイルを作成します。ファイルがすでに存在する場合、このメソッドはfalseを返します。この場合、ファイル名は(別の乱数を使用して)変更され、作成が再試行されます。

同じアプローチをとることができますが、FileSystemはパッケージのプライベートクラスなので、独自の方法で使用することはできません。代わりにFile.createNewFile()を使用して、ファイルをアトミックに作成してください。このメソッドは、ファイルが既に存在する場合にはfalseを返します。createTempFile()のような同様のループで使用できるので、createFileExclusively()メソッドを使用します。

+1

私は両方の答えからの入力に基づいてtempディレクトリ内に新しいファイルを作成する独自のメソッドを実装しました。ありがとう。 – Adarsh

7

一時ファイルを作成する独自のユーティリティメソッドを作成することができます。基本的に一時ファイルは以下のようにtempディレクトリに保存されます:

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

関連する問題