-3

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

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

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

4

2 回答 2

0

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"));
    }
}
于 2017-04-04T18:10:46.317 回答
0

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

ProcessBuilder pb = new ProcessBuilder();
pb.directory(new File("path to your tar"));
pb.command("tar", "-xzvf", "my tar");
pb.start();
于 2017-04-04T17:28:56.073 回答