web-dev-qa-db-ja.com

Javaで一時ファイルを作成する安全な方法は何ですか?

Javaで一時ファイルを作成するsafeの方法を探しています。安全とは、次の意味です。

  • 名前は、潜在的な競合状態であっても一意である必要があります(たとえば、別のスレッドが同時に同じfuncを呼び出す、または別のプロセスがこのコードを同時に実行するなど)
  • 潜在的な競合状態であっても、ファイルはプライベートである必要があります(たとえば、別のユーザーが高速でファイルをchmodしようとしています)
  • ファイルを削除するように指示できますが、一般的な削除を行う必要はなく、間違ったファイルを削除するリスクがあります
  • 理想的には、機会が得られる前に例外がスローされても、ファイルが削除されることを確認する必要があります
  • ファイルはデフォルトで正しい場所にある必要があります(たとえば、JVMがtmp dirを指定し、デフォルトはシステムのtemp dir)
71
SRobertJames

File.createTempFile() を使用します。

File tempFile = File.createTempFile("prefix-", "-suffix");
//File tempFile = File.createTempFile("MyAppName-", ".tmp");
tempFile.deleteOnExit();

次のように、一時ディレクトリにファイルを作成します。

prefix-6340763779352094442-suffix

104
Stefan

Java 7以降、temnpファイルおよびディレクトリを作成するための新しいメソッドを含む新しいファイルAPI "NIO2"があります。見る

例えば.

Path tempDir = Files.createTempDirectory("tempfiles");

または

Path tempFile = Files.createTempFile("tempfiles", ".tmp");
30
Tim Büthe