在Java中,可以使用Apache Commons Compress库来解压.tar
或.tar.gz
(gzip压缩的tar包)文件。以下是一个示例,演示如何使用该库解压一个.tar
或.tar.gz
文件到指定目录:
首先,确保已将Apache Commons Compress库添加到项目依赖中。如果你使用的是Maven,可以在pom.xml
文件中添加以下依赖:
xml
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.21</version>
</dependency>
</dependencies>
接下来,编写Java代码来解压.tar
或.tar.gz
文件:
java
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class TarGzExtractor {
public static void extractTarGz(String sourceFilePath, String destDir) throws IOException {
Path destPath = Paths.get(destDir);
if (!Files.isDirectory(destPath)) {
throw new IllegalArgumentException("Destination must be a valid directory");
}
try (InputStream fIn = Files.newInputStream(Paths.get(sourceFilePath));
BufferedInputStream bIn = new BufferedInputStream(fIn);
InputStream gzipIn = new GzipCompressorInputStream(bIn);
TarArchiveInputStream tIn = new TarArchiveInputStream(gzipIn)) {
TarArchiveEntry entry;
while ((entry = tIn.getNextTarEntry()) != null) {
Path targetPath = destPath.resolve(entry.getName());
if (entry.isDirectory()) {
Files.createDirectories(targetPath);
} else {
Files.copy(tIn, targetPath);
}
}
}
}
public static void main(String[] args) {
String sourceFilePath = "archive.tar.gz";
String destDir = "output/";
try {
extractTarGz(sourceFilePath, destDir);
System.out.println("Tar.gz extraction successful.");
} catch (IOException e) {
System.err.println("Error extracting tar.gz: " + e.getMessage());
}
}
}
这个示例定义了一个名为TarGzExtractor
的类,其中包含一个静态方法extractTarGz
,它接受一个.tar.gz
文件路径和一个目标解压目录作为参数。函数首先检查目标目录是否存在且为有效目录。然后,创建一个输入流链,依次包括:
- 源文件输入流。
- 缓冲输入流,提高读取效率。
- Gzip解压缩输入流。
- Tar输入流。
接着,通过一个循环遍历tar文件中的每个条目。对于每个条目,根据其类型(如目录或文件)在目标目录中创建相应的文件系统对象,并将条目的内容写入目标位置。
在main
方法中,调用extractTarGz
函数处理指定的.tar.gz
文件,并将解压结果保存到指定的目录。如果解压过程中发生错误,程序将打印错误信息;否则,显示解压成功的消息。
这个示例展示了如何使用Apache Commons Compress库解压.tar.gz
文件。如果只需要解压未压缩的.tar
文件,可以去掉Gzip相关的部分,直接创建TarArchiveInputStream
连接到源文件输入流。