java读取tar.gz文件里的文件
时间: 2023-07-06 22:35:33 浏览: 336
在 Java 中,可以使用 Apache Commons Compress 库来读取 tar.gz 文件。下面是一个简单的示例代码,示例中假设要读取的 tar.gz 文件中只有一个文件:
```java
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
import java.io.*;
public class TarGzReader {
public static void main(String[] args) throws IOException {
String fileName = "example.tar.gz"; // 要读取的 tar.gz 文件名
String innerFileName = "example.txt"; // 要读取的 tar.gz 文件里的文件名
// 创建文件输入流
FileInputStream fis = new FileInputStream(fileName);
// 创建 Gzip 压缩输入流
GzipCompressorInputStream gzis = new GzipCompressorInputStream(fis);
// 创建 Tar 归档输入流
TarArchiveInputStream tais = new TarArchiveInputStream(gzis);
// 读取 Tar 归档中的文件
TarArchiveEntry entry;
while ((entry = tais.getNextTarEntry()) != null) {
if (entry.getName().equals(innerFileName)) { // 找到要读取的文件
// 创建字节输入流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int len;
byte[] buffer = new byte[1024];
while ((len = tais.read(buffer)) != -1) {
baos.write(buffer, 0, len); // 将文件内容写入字节数组输出流
}
String content = baos.toString("UTF-8"); // 将字节数组输出流转换为字符串
System.out.println(content); // 输出文件内容
break;
}
}
// 关闭流
tais.close();
gzis.close();
fis.close();
}
}
```
上述示例代码中,首先创建文件输入流、Gzip 压缩输入流和 Tar 归档输入流。然后,使用 getNextTarEntry() 方法读取 Tar 归档中的每个条目,如果找到要读取的文件,就使用字节输入流将文件内容读取到字节数组输出流中,最后将字节数组输出流转换为字符串并输出。最后,关闭流。
阅读全文