Java GZip解压缩

用到了apache ant.jar的tar相关类,可去http://ant.apache.org/srcdownload.cgi  下载源码

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

import org.apache.tools.tar.TarEntry;
import org.apache.tools.tar.TarInputStream;


/** 
 * @Description  GZip解压测试
 */
public class GZipTest {
	 static final int BUFFER = 2048;

	    public static void main(String argv[]) throws IOException, URISyntaxException {
	    	File file = new File(Thread.currentThread().getContextClassLoader().getResource("curl-7.23.1.tar.gz").toURI());
	    	unZipFile(file, null);
	    }
	    public static void unZipFile(File file, String outputDir) {
	    	if(outputDir == null){
	    		outputDir = file.getParent();
	    	}
	    	  
	        try {  
	            //建立grip压缩文件输入流   
	        	TarInputStream tarIn = new TarInputStream(new GZIPInputStream(new FileInputStream(file)));
	        	TarEntry entry = null;  
	              
	            while( (entry = tarIn.getNextEntry()) != null ){  
	                  
	                if(entry.isDirectory()){//是目录  
	                      
	                    createDirectory(outputDir,entry.getName());//创建空目录  
	                      
	                }else{//是文件  
	                      
	                    File tmpFile = new File(outputDir + "/" + entry.getName());  
	                      
	                    createDirectory(tmpFile.getParent() + "/",null);//创建输出目录  
	                      
	                    OutputStream out = null;  
	                      
	                    try{  
	                      
	                        out = new FileOutputStream(tmpFile);  
	                          
	                        int length = 0;  
	                          
	                        byte[] b = new byte[2048];  
	                          
	                        while((length = tarIn.read(b)) != -1){  
	                            out.write(b, 0, length);  
	                        }  
	                      
	                    }catch(IOException ex){  
	                        throw ex;  
	                    }finally{  
	                          
	                        if(out!=null)  
	                            out.close();  
	                    }  
	                      
	                }  
	            }  
	        } catch (Exception ex){  
	            System.err.println(ex.toString());  
	        }
	    }
	    
	    
	    /** 
	     * 构建目录 
	     * @param outputDir 
	     * @param subDir 
	     */  
	    public static void createDirectory(String outputDir,String subDir){  
	        File file = new File(outputDir);  
	          
	        if(subDir != null && !subDir.trim().isEmpty()){//子目录不为空  
	              
	            file = new File(outputDir + "/" + subDir);  
	        }  
	          
	        if(!file.exists()){  
	              
	            file.mkdirs();  
	        }  
	          
	    } 
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值