我创建了一个简单的java程序,简而言之就是将两个目录移动到另一个目录。该程序工作正常,除非我尝试跨不同的驱动器移动文件,然后导致java.nio.file.DirectoryNotEmptyException,即使它不介意非空目录(事实上我需要它移动其中的所有内容) )。
try {
Files.move(source, target, StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e1) {
System.out.println("Something went wrong");
e1.printStackTrace();
}
答案 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());