解压并解压缩Java中的多个压缩文件
时间:2020-01-09 10:35:26 来源:igfitidea点击:
在Java创建Tar归档文件中的GZIP多个文件一文中,我们已经看到我们需要为多个文件创建一个tar归档文件,然后使用GZIP对其进行压缩。在本文中,我们将介绍如何在Java中解压缩多个压缩文件,首先需要解压缩gz文件(.tar.gz),然后再解压缩该tar球。
用Java解压缩压缩文件并解压缩存档
此处给出的Java程序用于解压缩以.tar.gz压缩的多个文件,它使用Apache Commons Compress库,可以从以下路径下载该文件https://commons.apache.org/proper/commons-compress/download_compress.cgi
此处使用的版本是commons-compress-1.18,因此commons-compress-1.18.jar已添加到类路径。
从Apache Commons Compress库中,有两个文件用于解压缩gzip文件和解压缩tar归档文件。
TarArchiveEntry –表示Tar归档文件中的条目。
TarArchiveInputStream –此类具有方法getNextTarEntry()从TarArchiveEntry读取存档条目。在循环这些归档条目时,请检查它是目录还是文件。如果是目录,则只需创建该目录,以防文件读取文件内容并将其写入输出流。
Java程序–解压缩Gzip文件并解压缩
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.compress.utils.IOUtils;
public class UntarArchive {
public static void main(String[] args) {
String COMPRESSED_FILE = "/home/theitroad/Documents/test.tar.gz";
String DESTINATION_PATH = "/home/theitroad/Documents/";
File destFile = new File(DESTINATION_PATH);
unTarFile(COMPRESSED_FILE, destFile);
}
private static void unTarFile(String tarFile, File destFile) {
TarArchiveInputStream tis = null;
try {
FileInputStream fis = new FileInputStream(tarFile);
// .gz
GZIPInputStream gzipInputStream = new GZIPInputStream(new BufferedInputStream(fis));
//.tar.gz
tis = new TarArchiveInputStream(gzipInputStream);
TarArchiveEntry tarEntry = null;
while ((tarEntry = tis.getNextTarEntry()) != null) {
System.out.println(" tar entry- " + tarEntry.getName());
if(tarEntry.isDirectory()){
continue;
}else {
// In case entry is for file ensure parent directory is in place
// and write file content to Output Stream
File outputFile = new File(destFile + File.separator + tarEntry.getName());
outputFile.getParentFile().mkdirs();
IOUtils.copy(tis, new FileOutputStream(outputFile));
}
}
}catch(IOException ex) {
System.out.println("Error while untarring a file- " + ex.getMessage());
}finally {
if(tis != null) {
try {
tis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
如果只想解压缩文件,则必须解压缩.tar文件而不是.tar.gz文件,则可以跳过创建GZIPInputStream的操作。
Instead of this FileInputStream fis = new FileInputStream(tarFile); GZIPInputStream gzipInputStream = new GZIPInputStream(new BufferedInputStream(fis)); TarArchiveInputStream tis = new TarArchiveInputStream(gzipInputStream); Have this instead FileInputStream fis = new FileInputStream(tarFile); TarArchiveInputStream tis = new TarArchiveInputStream(new BufferedInputStream(fis));

