Java Directory Copy nio copyDirectory(final Path source, final Path destination)

Here you can find the source of copyDirectory(final Path source, final Path destination)

Description

Implementation of recursive directory copy, does NOT overwrite

License

Apache License

Parameter

Parameter Description
source an existing source directory to copy from.
destination an existing destination directory to copy to.

Declaration

public static void copyDirectory(final Path source, final Path destination) throws IOException 

Method Source Code


//package com.java2s;
/*//from   w  w  w .  ja  v  a  2s  . c  om
 * Copyright 2016 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import com.google.common.base.Preconditions;
import java.io.IOException;
import java.nio.file.CopyOption;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.StandardCopyOption;
import java.nio.file.attribute.BasicFileAttributes;

public class Main {
    /**
     * Implementation of recursive directory copy, does NOT overwrite
     *
     * @param source an existing source directory to copy from.
     * @param destination an existing destination directory to copy to.
     */
    public static void copyDirectory(final Path source, final Path destination) throws IOException {
        Preconditions.checkNotNull(source);
        Preconditions.checkNotNull(destination);
        Preconditions.checkArgument(Files.isDirectory(source));
        Preconditions.checkArgument(Files.isDirectory(destination));
        Preconditions.checkArgument(!source.equals(destination));
        Preconditions.checkArgument(!destination.startsWith(source), "destination is child of source");

        Files.walkFileTree(source, new SimpleFileVisitor<Path>() {
            final CopyOption[] copyOptions = new CopyOption[] { StandardCopyOption.COPY_ATTRIBUTES };

            @Override
            public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {

                if (dir.equals(source)) {
                    return FileVisitResult.CONTINUE;
                }

                Files.copy(dir, destination.resolve(source.relativize(dir)), copyOptions);
                return FileVisitResult.CONTINUE;
            }

            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {

                Files.copy(file, destination.resolve(source.relativize(file)), copyOptions);
                return FileVisitResult.CONTINUE;
            }
        });

    }
}

Related

  1. copyDirectory(File srcDir, File destDir)
  2. copyDirectory(File srcDir, File destDir, boolean preserveFileDate)
  3. copyDirectory(final File source, final File destination)
  4. copyDirectory(final File sourceFile, final File targetDir)
  5. copyDirectory(final File srcDir, final File destDir)
  6. copyDirectory(final Path source, final Path destination, List excludes)
  7. copyDirectory(Path source, ArrayList targets)
  8. copyDirectory(String fromPath, String toPath)
  9. copyDirectory(String source, String destination)