2016-07-29 14 views
0

以下のこの機能を使用して、 'Construction Documents'という名前のフォルダをすべて見つけました。 すべてのコンテンツを別のディレクトリにコピーします。1つのフォルダを内容が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の文字列でフォルダを挿入したいとしている。私はのfileutilsを使用してみました、しかし、これは実際の建設ドキュメントフォルダの前に多くの親ファイルを含め、以上のディレクトリ全体をコピーします。ネイティブ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

これは、ディレクトリを別のディレクトリにコピーします。親ディレクトリは関係ありません。サブディレクトリの1つを選択する必要がある場合は、 'preVisitDirectory()'メソッドを 'if(!dir.getFileName()。equals(" w.e "))の前に追加して、FileVisitResult.SKIP_SUBTREE;を返します。それにもかかわらず、 'walkFileTree()'はあなたの友人になり、カスタムのループよりはるかに良いコードを生成します。 – sturcotte06

+0

これはうまくいきませんでした。おそらくローカルドライブではなく、ネットワークドライブからコピーしているからでしょうか? – ZKayyali

関連する問題