在Java中复制一个目录

3
基本上,看了这个教程,我发现其中讲到了如何使用REPLACE_EXISTING StandardCopyOption。
REPLACE_EXISTING - 即使目标文件已经存在也执行复制。如果目标是一个符号链接,则复制链接本身(而不是链接的目标)。如果目标是非空目录,则复制失败并抛出FileAlreadyExistsException异常。
在我引用的部分的结尾处,它说:“如果目标是非空目录,则复制失败并抛出FileAlreadyExistsException异常。”实际上,我已经尝试过,它没有抛出任何异常。我尝试将一个非空文件夹从一个位置复制到桌面,它成功地完成了,没有像理论上那样抛出FileAlreadyExistsException异常。
这是正常的吗?
1个回答

2
请尝试这个:
创建:
C:\map1\fileA.txt
C:\map2\fileB.txt

移动:

C:\map1 to C:\map2
Files.copy(
        (new File("C:\map1")).toPath(), 
        (new File("C:\map2")).toPath(), 
        StandardCopyOption.REPLACE_EXISTING);

这将导致:
C:\map1\fileA.txt
C:\map2\fileB.txt

为什么会出现这个问题?

“目录可以被复制,但是目录内的文件不会被复制,所以即使原始目录包含文件,新目录也是空的。”

正如您的参考所述。

DirectoryNotEmptyException - 如果指定了REPLACE_EXISTING选项但文件无法替换,因为它是一个非空目录(可选具体异常)

FileAlreadyExistsException - 如果目标文件已经存在但未指定REPLACE_EXISTING选项,则无法替换(可选具体异常)

来源。


啊,好的,我没有注意到那些细节,我会尽快尝试。 - Rollerball
我按照你说的做了,但是我得到了 IOExceptionjava.nio.file.DirectoryNotEmptyException 错误。我正在使用 jdk 1.7。 - Rollerball
你在这个测试中使用了哪个StandardCopyOption - Menno
一回家就会运行一些测试 :) - Menno
在一些平台上(可能只是 Windows),即使文件存在,甚至指定了 REPLACE_EXISTING,复制/移动操作也可能失败。 - Hakanai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接