Java 当抛出AccessDeniedException时,为什么files.move()会删除文件?
这只是一个概念问题。我正在使用Java 当抛出AccessDeniedException时,为什么files.move()会删除文件?,java,java.nio.file,Java,Java.nio.file,这只是一个概念问题。我正在使用Files.move()和StandardCopyOption.ATOMIC\u move选项。我原以为这样会更安全,但当抛出AccessDeniedException时,文件仍然会被删除 任何变通或解释都将不胜感激 代码非常简单: Files.move(netDirJobs.toPath(), archiveJobs.toPath(),StandardCopyOption.ATOMIC_MOVE); 操作系统:win7 Professional SP1 @马克杰
Files.move()
和StandardCopyOption.ATOMIC\u move
选项。我原以为这样会更安全,但当抛出AccessDeniedException时,文件仍然会被删除
任何变通或解释都将不胜感激
代码非常简单:
Files.move(netDirJobs.toPath(), archiveJobs.toPath(),StandardCopyOption.ATOMIC_MOVE);
操作系统:win7 Professional SP1
@马克杰罗尼姆斯:
netDirLog.toPath().getFileSystem().provider() = sun.nio.fs.WindowsFileSystemProvider@5dac9e07
archiveLog.toPath().getFileSystem().provider() = sun.nio.fs.WindowsFileSystemProvider@5dac9e07
Jup同一个物体嘿,伙计们,谢谢你们的努力 首先是一些补充信息: 我将数据移动两次,首先从源移动到临时,然后移动到最终目标 错误消息使我误以为这是文件问题。move()。但真正发生的是,它将文件正确地移动到了临时目录中,该目录当然因为只是临时的而被删除。我删除了临时目录的delete on exit命令,现在,如果从临时目录到目标的移动失败,它仍然按照我的预期保存在临时目录中 对不起,提出了不必要的问题
特别感谢马克·杰罗尼莫斯(Mark Jeronimus)在过去4天之后对其进行了调查。根据文件“原子移动”意思是:通过原子移动,您可以将文件移动到目录中,并保证任何监视目录的进程都可以访问完整的文件。现在,由于这将是文件系统方面的致命缺陷,您必须证明这确实发生了。我个人认为你的问题在别处,因为在这种情况下会导致数据丢失的文件系统会被破坏。我想在调试方面得到一些帮助。这两个文件都在同一个文件系统上吗?您可以在src和dst路径上执行
path.getFileSystem().provider()
,并检查结果是否是相同的对象吗?(与=
)相比,@MarkJeronimus将您的答案编辑到了问题中。我只能追溯到我遇到死路一条的MSDN呼叫。