java - 创建Temp文件的安全方法

SRo*_*mes 76 java temporary-files

我正在寻找一种在Java中创建临时文件的安全方法.安全,我的意思是:

  • 名称应该是唯一的,即使在潜在的竞争条件下(例如,另一个线程同时调用相同的func,或者另一个进程同时运行此代码)
  • 文件应该是私有的,即使在潜在的竞争条件下(例如,另一个用户试图以高速率chmod文件)
  • 我可以告诉它删除文件,而不必进行通用删除,并冒险删除错误的文件
  • 理想情况下,应确保删除文件,即使在我有机会之前抛出异常
  • 文件应该默认为一个理智的位置(例如JVM指定的tmp目录,默认为系统临时目录)

Ste*_*fan 111

使用File.createTempFile().

File tempFile = File.createTempFile("prefix-", "-suffix");
//File tempFile = File.createTempFile("MyAppName-", ".tmp");
tempFile.deleteOnExit();
Run Code Online (Sandbox Code Playgroud)

将在temp目录中创建一个文件,如:

前缀6340763779352094442后缀

  • 超!除了`deleteOnExit`之外,还有什么问题做正常的`tempFile.delete()`(因为我不希望在退出之前有大量的临时文件)? (4认同)
  • 我不认为这是安全的,创建的文件是世界可读的,它驻留在 tmp 目录中,任何用户都可以访问该目录。 (4认同)
  • 仅供参考,您无需担心有唯一的前缀/后缀,因为 Java 会在两者之间创建一个随机的数字字符串。 (2认同)
  • 不,您可以选择任何一种方式。 (2认同)

Tim*_*the 33

从Java 7开始,新文件API"NIO2"包含用于创建temnp文件和目录的新方法.看到

例如

Path tempDir = Files.createTempDirectory("tempfiles");
Run Code Online (Sandbox Code Playgroud)

要么

Path tempFile = Files.createTempFile("tempfiles", ".tmp");
Run Code Online (Sandbox Code Playgroud)