2016-07-29 33 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

相關問題