diff options
author | axtloss <axtlos@getcryst.al> | 2023-05-24 19:23:30 +0200 |
---|---|---|
committer | axtloss <axtlos@getcryst.al> | 2023-05-24 19:23:30 +0200 |
commit | 63146274f8cbe759742aa18413054515c0f81583 (patch) | |
tree | c6cddc91db04b04f31f8ab3c76406f9c53c0587c /src/main/java/io/github/jshipit/TarManager.java | |
parent | 732147566e83c1e160154b18c33618a36fac30e0 (diff) | |
download | jshipit-63146274f8cbe759742aa18413054515c0f81583.tar.gz jshipit-63146274f8cbe759742aa18413054515c0f81583.tar.bz2 |
Automatically extract downloaded blobs
Diffstat (limited to '')
-rw-r--r-- | src/main/java/io/github/jshipit/TarManager.java | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/main/java/io/github/jshipit/TarManager.java b/src/main/java/io/github/jshipit/TarManager.java new file mode 100644 index 0000000..40db71d --- /dev/null +++ b/src/main/java/io/github/jshipit/TarManager.java @@ -0,0 +1,72 @@ +package io.github.jshipit; + +import org.apache.commons.compress.archivers.tar.TarArchiveEntry; +import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; +import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; +import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream; +import org.apache.commons.compress.utils.IOUtils; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; + +public class TarManager { + + public TarManager() { + + } + + public void tar(String name, File... files) throws IOException { + try (TarArchiveOutputStream out = getTarArchiveOutputStream(name)){ + for (File file : files){ + addToArchive(out, file, "."); + } + } + } + + public void untar(String in, File out) throws IOException { + try (TarArchiveInputStream fin = new TarArchiveInputStream(new GzipCompressorInputStream(new FileInputStream(in)))){ + TarArchiveEntry entry; + while ((entry = fin.getNextTarEntry()) != null) { + if (entry.isDirectory()) { + continue; + } + File curfile = new File(out, entry.getName()); + File parent = curfile.getParentFile(); + if (!parent.exists()) { + parent.mkdirs(); + } + IOUtils.copy(fin, new FileOutputStream(curfile)); + } + } + } + + private TarArchiveOutputStream getTarArchiveOutputStream(String name) throws IOException { + TarArchiveOutputStream taos = new TarArchiveOutputStream(new FileOutputStream(name)); + taos.setBigNumberMode(TarArchiveOutputStream.BIGNUMBER_STAR); + taos.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU); + taos.setAddPaxHeadersForNonAsciiNames(true); + return taos; + } + + private void addToArchive(TarArchiveOutputStream out, File file, String dir) throws IOException { + String entry = dir + File.separator + file.getName(); + if (file.isFile()){ + out.putArchiveEntry(new TarArchiveEntry(file, entry)); + try (FileInputStream in = new FileInputStream(file)){ + IOUtils.copy(in, out); + } + out.closeArchiveEntry(); + } else if (file.isDirectory()) { + File[] children = file.listFiles(); + if (children != null){ + for (File child : children){ + addToArchive(out, child, entry); + } + } + } else { + System.out.println(file.getName() + " is not supported"); + } + } +}
\ No newline at end of file |