2016-07-29 109 views
0

我在下面编写了这个函数来查找所有名为'Construction Documents'的文件夹,我希望它将其所有内容复制到另一个目录中。如何将单个文件夹及其内容复制到Java中的另一个文件夹中

 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的字符串要插入的文件夹中。我尝试使用文件实用程序,但是这种过度复制整个目录,包括实际施工文件夹之前,许多家长的文件。原生的java也没有工作,只是导致错误。

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

+0

我不认为'continue'是做什么的,你认为它是。它实际上是到循环中的下一个'File',而不是继续你的代码。 –

+0

这部分实际上工作正常。该部分只是在文件搜索合适的文件夹进行复制时忽略文件。 – ZKayyali

回答

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; 
    } 
}); 
+0

这仍然复制网络根目录中的所有父目录。我想复制所选的最终文件夹及其所有子文件夹和文件。 – ZKayyali

+0

这将一个目录复制到另一个目录。没有涉及父目录。如果您需要选择其中一个子目录,请使用if(!dir.getFileName()。equals(“w.e”))返回FileVisitResult.SKIP_SUBTREE;'preVisitDirectory()'方法。无论如何,'walkFileTree()'将成为你的朋友,并且会产生比定制for循环更好的代码。 – sturcotte06

+0

这没有奏效。也许是因为从网络驱动器而不是本地驱动器复制? – ZKayyali

相关问题