Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当抛出AccessDeniedException时,为什么files.move()会删除文件?_Java_Java.nio.file - Fatal编程技术网

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呼叫。