在 Java 中解压缩 Tar(或 BZip+Tar)档案的最简单方法。
Apache Commons Compress具有用于解压缩 Tar 的类。但是您必须遍历所有存档条目并将每个条目的 InputStream 保存到文件中。
有没有办法“在一行代码中”简单地解压缩 Tar 存档中的所有文件?
在 Java 中解压缩 Tar(或 BZip+Tar)档案的最简单方法。
Apache Commons Compress具有用于解压缩 Tar 的类。但是您必须遍历所有存档条目并将每个条目的 InputStream 保存到文件中。
有没有办法“在一行代码中”简单地解压缩 Tar 存档中的所有文件?
Plexus Archiver可以做到。但它也需要依赖于plexus-container
:
例子:
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"));
}
}
我认为您最好的选择是作为子流程启动。这些库与文件系统条目一起使用。所以没有简单的方法可以在一行代码中做到这一点
ProcessBuilder pb = new ProcessBuilder();
pb.directory(new File("path to your tar"));
pb.command("tar", "-xzvf", "my tar");
pb.start();