JAVA 解压tar.gz格式文件

JAVA 解压tar.gz格式文件  ,亲测有效,因为tar.gz 是多用于Linux 系统下的压缩方式,而且是有两层加压,先把文件压缩成tar包,再把tar文件 压缩成gz 格式,网上相关的资料和方法都很少,更多地都是一些linux系统下面的命令,效率待提高 ,但可用


解压方法:
package unjargz.core.data;

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

import org.apache.commons.compress.archivers.ArchiveException;
import org.apache.commons.compress.archivers.ArchiveInputStream;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
 
public class Unjar {
 
    private BufferedOutputStream bufferedOutputStream;
 
    String zipfileName = null;
 
    public Unjar(String fileName) {
       this.zipfileName = fileName;
    }
   
    public static void unTargzFile(String rarFileName, String destDir) {
       Unjar gzip = new Unjar(rarFileName);
       String outputDirectory = destDir;
       File file = new File(outputDirectory);
       if (!file.exists()) {
           file.mkdir();
       }
       gzip.unzipOarFile(outputDirectory);
 
    }
 
    public void unzipOarFile(String outputDirectory) {
       FileInputStream fis = null;
       ArchiveInputStream in = null;
       BufferedInputStream bufferedInputStream = null;
       try {
           fis = new FileInputStream(zipfileName);
           GZIPInputStream is = new GZIPInputStream(new BufferedInputStream(
                  fis));
           in = new ArchiveStreamFactory().createArchiveInputStream("tar", is);
           bufferedInputStream = new BufferedInputStream(in);
           TarArchiveEntry entry = (TarArchiveEntry) in.getNextEntry();
           System.out.println("开始解压:");
           while (entry != null) {
         System.out.print(">");
              String name = entry.getName();
              String[] names = name.split("/");
              String fileName = outputDirectory;
              for(int i = 0;i
                  String str = names[i];
                  fileName = fileName + File.separator + str;
              }
              if (name.endsWith("/")) {
                  mkFolder(fileName);
              } else {
                  File file = mkFile(fileName);
                  bufferedOutputStream = new BufferedOutputStream(
                         new FileOutputStream(file));
                  int b;
                  while ((b = bufferedInputStream.read()) != -1) {
                     bufferedOutputStream.write(b);
                  }
                  bufferedOutputStream.flush();
                  bufferedOutputStream.close();
              }
              entry = (TarArchiveEntry) in.getNextEntry();
           }
           System.out.println("解压完成 !");
 
       } catch (FileNotFoundException e) {
           e.printStackTrace();
       } catch (IOException e) {
           e.printStackTrace();
       } catch (ArchiveException e) {
           e.printStackTrace();
       } finally {
           try {
              if (bufferedInputStream != null) {
                  bufferedInputStream.close();
              }
           } catch (IOException e) {
              e.printStackTrace();
           }
       }
    }
 
    private void mkFolder(String fileName) {
       File f = new File(fileName);
       if (!f.exists()) {
           f.mkdir();
       }
    }
 
    private File mkFile(String fileName) {
       File f = new File(fileName);
       try {
           f.createNewFile();
       } catch (IOException e) {
           e.printStackTrace();
       }
       return f;
    }
}

主函数:
package unjargz.core.data;

import java.io.File;

public class properties {

@SuppressWarnings("static-access")
public static void main(String[] args) throws Exception {

String path = "d:\\HW_20161217.tar.gz";


String pt=path.substring(3,5);
String year=path.substring(6,10);
String month=path.substring(10,12);
String day=path.substring(12,14);

System.out.println(pt);
System.out.println(year);
System.out.println(month);
System.out.println(day);
String untargzpath = "d:\"+pt+"\"+year+"\"+month+"\"+day+"\";
File  file = new File(untargzpath);
if(!file.exists())
file.mkdirs();
Unjar unjar = new Unjar(path);
unjar.unTargzFile(path, untargzpath);

}
}

猜你喜欢

转载自blog.csdn.net/u012972294/article/details/53885820