【问题标题】:Unpack whole Tar easily in Java在 Java 中轻松解压整个 Tar
【发布时间】:2017-04-04 17:19:35
【问题描述】:

用 Java 解压 Tar(或 BZip+Tar)档案的最简单方法。

Apache Commons Compress 有解压 Tar 的类。但是您必须遍历所有存档条目并将每个条目的 InputStream 保存到文件中。

有没有办法“在一行代码中”简单地从 Tar 存档中解压所有文件?

【问题讨论】:

    标签: java tar apache-commons-compress


    【解决方案1】:

    我认为您最好的选择是作为子进程启动。这些库与文件系统条目一起使用。所以没有简单的方法可以在一行代码中做到这一点

    ProcessBuilder pb = new ProcessBuilder();
    pb.directory(new File("path to your tar"));
    pb.command("tar", "-xzvf", "my tar");
    pb.start();
    

    【讨论】:

    • 不保证 tar 实用程序在计算机上可用。我只需要使用 Java。
    • 那么我的印象是,如果你想避免将来重复这种情况,你需要在 apache 的 compress 上编写自己的库。
    【解决方案2】:

    Plexus Archiver 可以做到。 但它也需要对plexus-container的依赖:

    • org.codehaus.plexus:plexus-archiver:3.4
    • org.codehaus.plexus:plexus-container-default:1.7.1

    例子:

    import org.codehaus.plexus.archiver.tar.TarUnArchiver;
    import org.codehaus.plexus.logging.Logger;
    import org.codehaus.plexus.logging.console.ConsoleLogger;
    import org.junit.Test;
    import java.io.File;
    import java.io.IOException;
    import java.nio.file.Files;
    import static org.hamcrest.MatcherAssert.assertThat;
    import static org.hamcrest.Matchers.arrayContaining;
    
    public class UnpackTarTest {
    
        @Test
        public void wholeTarAtOnce() throws IOException {
            File srcFile = new File(getClass().getResource("my.tar").getFile());
            File destDir = Files.createTempDirectory("UnpackTarTest_").toFile();
            destDir.deleteOnExit();
    
            final TarUnArchiver ua = new TarUnArchiver();
            ua.setSourceFile(srcFile);
            ua.enableLogging(new ConsoleLogger(Logger.LEVEL_DEBUG, "console_logger"));
            ua.setDestDirectory(destDir);
            ua.extract();
            assertThat(destDir.list(), arrayContaining("mytar"));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      相关资源
      最近更新 更多