为什么抛出 AccessDeniedException 时 Files.move() 会删除文件?

Why are files deleted by Files.move() when an AccessDeniedException is thrown?

这只是一个概念性问题。我正在使用 Files.move()StandardCopyOption.ATOMIC_MOVE 选项。我认为那样会更安全,但结果是当抛出 AccessDeniedException 时文件仍然被删除。

感谢任何解决方法或解释。

代码很简单:

Files.move(netDirJobs.toPath(), archiveJobs.toPath(),StandardCopyOption.ATOMIC_MOVE);

OS: win7 专业版 SP1

@MarkJeronimus:

netDirLog.toPath().getFileSystem().provider()  = sun.nio.fs.WindowsFileSystemProvider@5dac9e07
archiveLog.toPath().getFileSystem().provider() = sun.nio.fs.WindowsFileSystemProvider@5dac9e07

Jup 相同对象

大家好,感谢您的努力。

首先补充一些信息: 我将数据移动两次,首先从源移动到临时数据,然后再移动到最终目的地。

报错信息误以为是Files.move()的问题。但真正发生的是它将文件正确地移动到临时目录,然后当然因为只是临时目录而被删除。我删除了临时目录的退出时删除命令,现在如果从临时目录移动到目的地失败,它仍会按我的预期保存在临时目录中。

抱歉提出不必要的问题。

特别感谢 Mark Jeronimus 即使在 4 天过去后仍对它进行调查。