在Java中创建临时文件的安全方法是什么?

2022-08-31 07:30:46

我正在寻找一种在Java中创建临时文件的安全方法。通过安全,我的意思是以下内容:

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

答案 1

使用 File.createTempFile()

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

将在临时目录中创建一个文件,例如:

前缀-6340763779352094442-后缀


答案 2

从Java 7开始,有新的文件API“NIO2”,其中包含用于创建temnp文件和目录的新方法。看

例如:

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

Path tempFile = Files.createTempFile("tempfiles", ".tmp");

安全提示:

和 之间的重要区别还在于后者具有更安全的权限默认值。File.createTempFile()Files.createTempFile

如果未指定任何文件属性,则生成的文件可能对该方法创建的文件具有更严格的访问权限。File.createTempFile(String,String,File)


推荐