package alien4cloud.utils; import java.io.IOException; import java.nio.file.FileVisitResult; import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import lombok.AllArgsConstructor; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; import com.google.common.io.Closeables; @AllArgsConstructor(suppressConstructorProperties = true) public class TarDirWalker extends SimpleFileVisitor<Path> { private Path basePath; private TarArchiveOutputStream tarArchiveOutputStream; @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { if (!dir.equals(basePath)) { tarArchiveOutputStream.putArchiveEntry(new TarArchiveEntry(FileUtil.getChildEntryRelativePath(basePath, dir, true))); } return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { FileUtil.putTarEntry(tarArchiveOutputStream, new TarArchiveEntry(FileUtil.getChildEntryRelativePath(basePath, file, true)), file); return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException { Closeables.close(tarArchiveOutputStream, true); throw exc; } }