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

时间:2017-06-25 17:26:02

标签: java swing exception

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

try {
        Files.move(source, target, StandardCopyOption.REPLACE_EXISTING);
    } catch (IOException e1) {
        System.out.println("Something went wrong");
        e1.printStackTrace();
    }

1 个答案:

答案 0 :(得分:1)

Files.move(file, cgbaFile.getParent(), StandardCopyOption.REPLACE_EXISTING);

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

例如,假设您要移动/tmp/foo.txt to the /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());