package gov.loc.repository.bagit.examples.serialization; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.SimpleFileVisitor; import java.nio.file.StandardOpenOption; import java.nio.file.attribute.BasicFileAttributes; import org.junit.Assert; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.kamranzafar.jtar.TarEntry; import org.kamranzafar.jtar.TarOutputStream; public class CreateTarBagExample extends Assert { @Rule public TemporaryFolder folder= new TemporaryFolder(); private Path bagRoot; private Path tarredBagPath; private OutputStream outputStream; @Before public void setup() throws IOException{ bagRoot = Paths.get(new File("src/test/resources/bags/v0_97/bag").toURI()); tarredBagPath = Paths.get(folder.newFile("bag.tar").toURI()); outputStream = Files.newOutputStream(tarredBagPath, StandardOpenOption.CREATE); } /** * <b> THIS IS JUST AN EXAMPLE. DO NOT USE IN PRODUCTION!</b> */ @Test public void createTarBagWithJTar(){ try(TarOutputStream out = new TarOutputStream(outputStream);) { TarVistor visitor = new TarVistor(out, bagRoot); Files.walkFileTree(bagRoot, visitor); assertTrue(Files.exists(tarredBagPath)); } catch (IOException e) { e.printStackTrace(); } } class TarVistor extends SimpleFileVisitor<Path>{ private TarOutputStream tar; private Path bagRoot; public TarVistor(TarOutputStream tar, Path bagRoot){ this.tar = tar; this.bagRoot = bagRoot; } @Override public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) throws IOException { try{ Path relative = bagRoot.relativize(path); TarEntry tarEntry = new TarEntry(path.toFile(), relative.toString()); tar.putNextEntry(tarEntry); Files.copy(path, tar); } catch(Exception e){ e.printStackTrace(); } return FileVisitResult.CONTINUE; } } }