如何在Java中将整个内容从目录复制到另一个目录?

时间:2012-08-11 22:02:18

标签: java

File content[] = new File("C:/FilesToGo/").listFiles();

for (int i = 0; i < content.length; i++){                       

    String destiny = "C:/Kingdoms/"+content[i].getName();           
    File desc = new File(destiny);      
    try {
        Files.copy(content[i].toPath(), desc.toPath(), StandardCopyOption.REPLACE_EXISTING);
    } catch (IOException e) {
        e.printStackTrace();
    }                   
}   

这就是我所拥有的。它复制一切就好了。 但在内容中有一些文件夹。复制文件夹,但文件夹的内容不是。

3 个答案:

答案 0 :(得分:3)

建议在Apache Commons IO中使用FileUtils

FileUtils.copyDirectory(new File("C:/FilesToGo/"),
                        new File("C:/Kingdoms/"));

复制目录&amp;内容。

答案 1 :(得分:0)

递归。这是一种使用递归来删除文件夹系统的方法:

public void move(File file, File targetFile) {
    if(file.isDirectory() && file.listFiles() != null) {
        for(File file2 : file.listFiles()) {
            move(file2, new File(targetFile.getPath() + "\\" + file.getName());
        }
    }
    try {
         Files.copy(file, targetFile.getPath() + "\\" + file.getName(),  StandardCopyOption.REPLACE_EXISTING);
    } catch (IOException e) {
        e.printStackTrace();
    } 
}

没有测试代码,但它应该工作。基本上,它深入到文件夹,告诉它移动项目,如果它是一个文件夹,通过它的所有孩子,并移动它们等。

答案 2 :(得分:0)

只是为了澄清Alex Coleman的答案需要改变什么才能使代码生效。以下是我测试的Alex代码的修改版本,对我来说很好用:

private void copyDirectoryContents(File source, File destination){
    try {
        String destinationPathString = destination.getPath() + "\\" + source.getName();
        Path destinationPath = Paths.get(destinationPathString);
        Files.copy(source.toPath(), destinationPath, StandardCopyOption.REPLACE_EXISTING);
    }        
    catch (UnsupportedOperationException e) {
        //UnsupportedOperationException
    }
    catch (DirectoryNotEmptyException e) {
        //DirectoryNotEmptyException
    }
    catch (IOException e) {
        //IOException
    }
    catch (SecurityException e) {
        //SecurityException
    }

    if(source.isDirectory() && source.listFiles() != null){
        for(File file : source.listFiles()) {               
            copyDirectoryContents(file, new File(destination.getPath() + "\\" + source.getName()));
        }
    }

}