tar.gz文件解压

时间:2022-09-07 16:36:56

try(Resource res=XX ()){

  work with res

}

try-with-resource是JDK1.7的新特性,()括号里的内容支持包括流以及任何可关闭的资源,数据流(其他资源)会在try块执行完毕之后自动被关闭,省去了写finally块关闭资源的步骤。

 

//解压tar.gz文件

    /*

    * @param sourceFile要解压的文件

    * @param target 要解压到的目录

    */

    private void untarFile(File sourceFile,String target) throws IOException{

        if(sourceFile.exists() && sourceFile.isFile()){

            try(TarArchiveInputStream tarIn=new TarArchiveInputStream(new GZIPInputStream(new BufferedInputStream(new FileInputStream(sourceFile))))){

                TarArchiveEntry entry=null;

                while((entry=tarIn.getNextTarEntry())!=null) {

                   File tarFile=new File(target,entry.getName());

                   if(entry.isDirectory()) {//是目录,创建目录

                      tarFile.mkdirs();

                   }else {//是文件

                        if(tarFile.getParentFile().exists()) {//可能存在创建目录延迟,父目录还没创建好,找不着
                               tarFile.getParentFile().mkdirs();
        }

                       try(OutputStream out=new FileOutputStream(tarFile)){

                           int length=0;

                           byte[] b=new byte[2048];

                           while((length=tarIn.read())!=-1) {

                               out.write(b,0,length);

                           }

                       }catch (Exception e) {

                           // TODO: handle exception

                       }

                   }

                }

            }catch (Exception e) {

                // TODO: handle exception

            }

        }

    }

 

需要引入的包

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.GZIPInputStream;

import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;