Java跨驱动器移动文件会导致DirectoryNotEmptyException

Java跨驱动器移动文件会导致DirectoryNotEmptyException,java,swing,exception,Java,Swing,Exception,我创建了一个简单的java程序,简言之,它接受两个目录,然后将一个目录移动到另一个目录。除非我尝试在不同的驱动器之间移动文件,否则该程序工作正常,然后导致java.nio.file.DirectoryNotEmptyException,即使它不介意非空目录(事实上,我需要它来移动其中的所有内容) 对于目标,您提供了要将文件移动到的目录。这是不正确的。目标应该是您希望文件具有的新路径名——新目录加上文件名 例如,假设您想将/tmp/foo.txt移动到/var/tmp目录。当您应该调用Files.

我创建了一个简单的java程序,简言之,它接受两个目录,然后将一个目录移动到另一个目录。除非我尝试在不同的驱动器之间移动文件,否则该程序工作正常,然后导致java.nio.file.DirectoryNotEmptyException,即使它不介意非空目录(事实上,我需要它来移动其中的所有内容)

对于目标,您提供了要将文件移动到的目录。这是不正确的。目标应该是您希望文件具有的新路径名——新目录加上文件名

例如,假设您想将
/tmp/foo.txt移动到/var/tmp
目录。当您应该调用
Files.move(“/tmp/foo.txt”、“/var/tmp”)时,您正在调用
Files.move(“/tmp/foo.txt”、“/var/tmp/foo.txt”)

您会遇到这个特定错误,因为JVM试图删除目标目录,以便用文件替换它

其中之一应该生成正确的目标路径:

Path target = cgbaFile.resolveSibling(file.getFileName());

Path target = cgbaFile.getParent().resolve(file.getFileName());
对于目标,您提供了要将文件移动到的目录。这是不正确的。目标应该是您希望文件具有的新路径名——新目录加上文件名

例如,假设您想将
/tmp/foo.txt移动到/var/tmp
目录。当您应该调用
Files.move(“/tmp/foo.txt”、“/var/tmp”)时,您正在调用
Files.move(“/tmp/foo.txt”、“/var/tmp/foo.txt”)

您会遇到这个特定错误,因为JVM试图删除目标目录,以便用文件替换它

其中之一应该生成正确的目标路径:

Path target = cgbaFile.resolveSibling(file.getFileName());

Path target = cgbaFile.getParent().resolve(file.getFileName());
Path target = cgbaFile.resolveSibling(file.getFileName());

Path target = cgbaFile.getParent().resolve(file.getFileName());