解压并解压缩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));