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);

}
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java可以使用Apache Commons Compress库来解压tar.gz压缩包。以下是一个示例代码: ```java import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream; public class TarGzExtractor { public static void extract(String tarGzFilePath, String destDirPath) throws IOException { InputStream is = new FileInputStream(tarGzFilePath); BufferedInputStream bis = new BufferedInputStream(is); GzipCompressorInputStream gzipIn = new GzipCompressorInputStream(bis); TarArchiveInputStream tarIn = new TarArchiveInputStream(gzipIn); TarArchiveEntry entry; while ((entry = tarIn.getNextTarEntry()) != null) { File destPath = new File(destDirPath + File.separator + entry.getName()); if (entry.isDirectory()) { destPath.mkdirs(); } else { OutputStream out = new FileOutputStream(destPath); byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = tarIn.read(buffer)) != -1) { out.write(buffer, 0, bytesRead); } out.close(); } } tarIn.close(); } } ``` 你只需要调用 `extract` 方法,传入要解压tar.gz文件路径和目标文件夹路径即可。例如: ```java TarGzExtractor.extract("/path/to/file.tar.gz", "/path/to/dest/folder"); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值