li.rudin.mavenjs.plugin.util.DirCopyVisitor Maven / Gradle / Ivy
package li.rudin.mavenjs.plugin.util;
import java.io.IOException;
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;
import org.apache.maven.plugin.logging.Log;
/**
* http://stackoverflow.com/questions/6214703/copy-entire-directory-contents-to-another-directory
* @author user
*
*/
public class DirCopyVisitor extends SimpleFileVisitor
{
private final Path targetPath;
private final Log logger;
private Path sourcePath = null;
public DirCopyVisitor(Path targetPath, Log logger) throws IOException
{
//create target root dir
Files.createDirectories(targetPath);
this.targetPath = targetPath;
this.logger = logger;
}
@Override
public FileVisitResult preVisitDirectory(final Path dir, final BasicFileAttributes attrs) throws IOException
{
if (sourcePath == null)
sourcePath = dir;
else
{
Path relativeDir = sourcePath.relativize(dir);
if (relativeDir.startsWith("META-INF"))
return FileVisitResult.SKIP_SUBTREE;
Files.createDirectories(targetPath.resolve(relativeDir));
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) throws IOException
{
Path relativePath = sourcePath.relativize(file);
Path absoluteTargetPath = targetPath.resolve(relativePath);
logger.info(relativePath + " -> " + targetPath);
Files.copy(file, absoluteTargetPath, StandardCopyOption.REPLACE_EXISTING);
return FileVisitResult.CONTINUE;
}
} © 2015 - 2025 Weber Informatics LLC | Privacy Policy