如何将包含其内容的单个文件夹复制到Java

时间:2016-07-29 18:10:43

标签: java fileutils

我在下面写了这个函数,找到所有名为' Construction Documents'的文件夹, 我希望它将所有内容复制到另一个目录。

        private void findDirectory(File parentDirectory, String insertDir) {
            if(foundFolder) {
                return;
            }
            File[] files = parentDirectory.listFiles();
            for (File file : files) {
                if (file.isFile()) {
                    continue;
                }
                if (file.getName().equals("Construction Documents")) {
                    System.out.println(file.getAbsolutePath());
                    if(file.getParent().contains("Original") || file.getParent().contains("Revision") || file.getParent().contains("R0")){
                        new File(insertDir + file.getParent()).mkdir();
                        try {
                    //      FileUtils.copyDirectory(new File(file), new File(insertDir + file.getParent().toString()));
                            Files.copy(file.toPath(), new File(insertDir + file.getParent().toString()).toPath());
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }
                if(file.isDirectory()) {
                    findDirectory(file, insertDir);
                }
            }
        }

insertDir是文件路径id的字符串,就像插入文件夹一样。我尝试使用FileUtils,但这会复制整个ENTIRE目录,包括实际构造文档文件夹之前的许多父文件。原生java也没有工作,只是导致错误。

简而言之,我想将一个文件夹及其所有子文件夹和内容复制到另一个文件夹,但不会在目标端创建复制文件中的所有父文件。

1 个答案:

答案 0 :(得分:1)

沿着这些方向:

Path srcDir = Paths.get("c:\\src");
Path dstDir = Paths.get("c:\\dst");
Files.walkFileTree(srcDir, new SimpleFileVisitor<Path>() {
    @Override
    public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
        Path dstSubDir = dstDir.resolve(srcDir.relativize(dir));
        Files.createDirectories(dstSubDir);
        return FileVisitResult.CONTINUE;
    }

    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
        Path dstFile = dstDir.resolve(srcDir.relativize(file));
        Files.copy(file, dstFile);
        return FileVisitResult.CONTINUE;
    }
});