【问题标题】:Copying a directory in Java在 Java 中复制目录
【发布时间】:2013-04-26 17:33:27
【问题描述】:

基本上阅读this 教程,我遇到了一点,其中解释了如何使用REPLACE_EXISTING StandardCopyOption。

REPLACE_EXISTING – 即使目标文件已经存在也执行复制 存在。如果目标是符号链接,则复制链接本身 (而不是链接的目标)。如果目标是非空的 目录,复制失败并出现 FileAlreadyExistsException 例外。

在我引用的那段末尾,它说“如果目标是非空目录,则复制失败并出现 FileAlreadyExistsException 异常。” 实际上我已经尝试过了,它没有给我任何异常,我尝试将一个非空文件夹从一个位置复制到桌面,它成功了,但没有给我理论上我应该得到的 FileAlreadyExistsException。

有规律吗?

【问题讨论】:

    标签: java exception io copy


    【解决方案1】:

    试试这个:

    创建:

    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 选项而无法替换(可选特定异常)

    Source.

    【讨论】:

    • 啊,好吧,我没有捕捉到这些细节,我会尽快尝试
    • 我按照你说的做了,我得到了 IOExceptionjava.nio.file.DirectoryNotEmptyException: 我正在使用 jdk 1.7。
    • 你在这个测试中使用了哪个StandardCopyOption
    • 我一到家就会运行一些测试 :)
    • 同样在某些平台(可能只是 Windows)上,即使文件存在,即使指定了 REPLACE_EXISTING,复制/移动也会失败。
    猜你喜欢
    • 2012-01-07
    • 2012-12-17
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 2011-12-07
    • 1970-01-01
    相关资源
    最近更新 更多