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

问题描述 投票:0回答:2

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

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

使用

File.createTempFile()
.

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

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

前缀-6340763779352094442-后缀


66
投票

自 Java 7 以来,有新的文件 API“NIO2”,其中包含用于创建临时文件和目录的新方法。见

例如

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

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

安全通知:

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

当没有指定文件属性时,那么生成的文件可能 对由创建的文件具有更严格的访问权限

File.createTempFile(String,String,File)
方法。

© www.soinside.com 2019 - 2024. All rights reserved.