【问题标题】:Automatically Delete Temporary Files using "new" Java File API使用“新”Java File API 自动删除临时文件
【发布时间】:2015-12-17 21:23:54
【问题描述】:

在使用旧的File API 编码多年后,我终于准备好跳上整个Path/Paths 火车。在大多数情况下,这进展顺利,但是,我在这个特定方面感到困惑:临时文件。

java.nio.Files#createTempFile 上的文档说:

File.createTempFile 方法一样,此方法只是临时文件工具的一部分。在用作工作文件的情况下,可以使用DELETE_ON_CLOSE 选项打开生成的文件,以便在调用适当的关闭方法时删除该文件。或者,可以使用shutdown-hook 或File.deleteOnExit() 机制自动删除文件。

我看不到应该在哪里指定 DELETE_ON_CLOSE 选项。使用关闭挂钩非常不方便(除非我想错了)。为了避免同时使用Path 对象 File 对象,我正在为 Path 对象寻找类似于File.deleteOnExit() 的解决方案,但显然不需要使用Path.toFile().[...].toPath() 一种调用模式。

使用java.nio.Files API 实现“自毁”临时文件的正确方法是什么?

【问题讨论】:

  • path.toFile().deleteOnExit() ?
  • @assylias 我曾想过这一点,但我认为会有更好的方法。 toFile() 方法转换为 File 对象,它是旧 API 的一部分。这是我现在使用的解决方案,但就像我说的,我试图避免使用旧 API。
  • 文件未被弃用,该解决方案没有任何问题!例如,要使用打开选项,您可以使用 Files.newXxx 之一,例如 newBufferedWriter。但这对于您的用例可能并不实用。

标签: java temporary-files


【解决方案1】:

您在编写时设置该选项,例如:

Path myTempFile = Files.createTempFile(...);
Files.write(myTempFile, ..., StandardOpenOption.DELETE_ON_CLOSE);

【讨论】:

  • 虽然技术上是正确的,但您的代码示例在编写时完全没用,因为它在写入临时文件后立即删除它。也就是说,Files 类还提供了几种方法,DELETE_ON_CLOSE 选项实际上对这些方法有意义,例如newByteChannel()
猜你喜欢
  • 1970-01-01
  • 2015-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多