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

我正在寻找一种用 Java 创建临时文件的 安全方法:

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

使用 File.createTempFile()

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

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

前缀 -6340763779352094442-后缀

从 Java7开始,就有了新的文件 API“ NIO2”,它包含了创建 temnp 文件和目录的新方法。你看

例如:。

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

或者

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

保安告示:

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

如果未指定文件属性,则生成的文件可以 控件创建的文件具有更多限制性访问权限 File.createTempFile(String,String,File)法。