• java解压缩.gz .zip .tar.gz等格式的压缩包方法总结


    1、.gz文件是linux下常见的压缩格式。使用 java.util.zip.GZIPInputStream即可,压缩是 java.util.zip.GZIPOutputStream

     1     public static void unGzipFile(String sourcedir) {
     2         String ouputfile = "";
     3         try {  
     4             //建立gzip压缩文件输入流 
     5             FileInputStream fin = new FileInputStream(sourcedir);   
     6             //建立gzip解压工作流
     7             GZIPInputStream gzin = new GZIPInputStream(fin);   
     8             //建立解压文件输出流  
     9             ouputfile = sourcedir.substring(0,sourcedir.lastIndexOf('.'));
    10             ouputfile = ouputfile.substring(0,ouputfile.lastIndexOf('.'));
    11             FileOutputStream fout = new FileOutputStream(ouputfile);   
    12             
    13             int num;
    14             byte[] buf=new byte[1024];
    15 
    16             while ((num = gzin.read(buf,0,buf.length)) != -1)
    17             {   
    18                 fout.write(buf,0,num);   
    19             }
    20 
    21             gzin.close();   
    22             fout.close();   
    23             fin.close();   
    24         } catch (Exception ex){  
    25             System.err.println(ex.toString());  
    26         }  
    27         return;
    28     }  

    2、zip文件,使用java.util.zip.ZipEntry 和 java.util.zip.ZipFile

     1 /** 
     2      * 解压缩zipFile 
     3      * @param file 要解压的zip文件对象 
     4      * @param outputDir 要解压到某个指定的目录下 
     5      * @throws IOException 
     6      */  
     7     public static void unZip(File file,String outputDir) throws IOException {     
     8         ZipFile zipFile = null;  
     9           
    10         try {  
    11             Charset CP866 = Charset.forName("CP866");  //specifying alternative (non UTF-8) charset
    12             //ZipFile zipFile = new ZipFile(zipArchive, CP866);
    13             zipFile =  new ZipFile(file, CP866);        
    14             createDirectory(outputDir,null);//创建输出目录  
    15   
    16             Enumeration<?> enums = zipFile.entries();  
    17             while(enums.hasMoreElements()){  
    18                   
    19                 ZipEntry entry = (ZipEntry) enums.nextElement();  
    20                 System.out.println("解压." +  entry.getName());  
    21                   
    22                 if(entry.isDirectory()){//是目录
    23                     createDirectory(outputDir,entry.getName());//创建空目录                
    24                 }else{//是文件      
    25                     File tmpFile = new File(outputDir + "/" + entry.getName());   
    26                     createDirectory(tmpFile.getParent() + "/",null);//创建输出目录  
    27                       
    28                     InputStream in = null;    
    29                     OutputStream out = null;  
    30                     try{  
    31                         in = zipFile.getInputStream(entry);;    
    32                         out = new FileOutputStream(tmpFile);  
    33                         int length = 0;  
    34                           
    35                         byte[] b = new byte[2048];   
    36                         while((length = in.read(b)) != -1){  
    37                             out.write(b, 0, length);  
    38                         }  
    39                       
    40                     }catch(IOException ex){  
    41                         throw ex;  
    42                     }finally{  
    43                         if(in!=null)  
    44                             in.close();  
    45                         if(out!=null)  
    46                             out.close();  
    47                     }      
    48                 }  
    49             }  
    50               
    51         } catch (IOException e) {  
    52             throw new IOException("解压缩文件出现异常",e);  
    53         } finally{  
    54             try{  
    55                 if(zipFile != null){  
    56                     zipFile.close();  
    57                 }  
    58             }catch(IOException ex){  
    59                 throw new IOException("关闭zipFile出现异常",ex);  
    60             }  
    61         }      
    62     }  
    63       
    64     /** 
    65      * 构建目录 
    66      * @param outputDir 
    67      * @param subDir 
    68      */  
    69     public static void createDirectory(String outputDir,String subDir){     
    70         File file = new File(outputDir);  
    71         if(!(subDir == null || subDir.trim().equals(""))){//子目录不为空  
    72             file = new File(outputDir + "/" + subDir);  
    73         }  
    74         if(!file.exists()){  
    75               if(!file.getParentFile().exists())
    76                   file.getParentFile().mkdirs();
    77             file.mkdirs();  
    78         }  
    79     }  

    3、.tar.gz文件可以看做先用tar打包,再使用gz进行压缩。

    使用org.apache.tools.tar.TarEntry;  org.apache.tools.tar.TarInputStream 和 org.apache.tools.tar.TarOutputStream

     1  //------------------------------------------------------------------------------------------------------
     2     /** 
     3      * 解压tar.gz 文件 
     4      * @param file 要解压的tar.gz文件对象 
     5      * @param outputDir 要解压到某个指定的目录下 
     6      * @throws IOException 
     7      */  
     8     public static void unTarGz(File file,String outputDir) throws IOException{  
     9         TarInputStream tarIn = null;  
    10         try{  
    11             tarIn = new TarInputStream(new GZIPInputStream(  
    12                     new BufferedInputStream(new FileInputStream(file))),  
    13                     1024 * 2);  
    14               
    15             createDirectory(outputDir,null);//创建输出目录  
    16 
    17             TarEntry entry = null;  
    18             while( (entry = tarIn.getNextEntry()) != null ){  
    19                   
    20                 if(entry.isDirectory()){//是目录
    21                     entry.getName();
    22                     createDirectory(outputDir,entry.getName());//创建空目录  
    23                 }else{//是文件
    24                     File tmpFile = new File(outputDir + "/" + entry.getName());  
    25                     createDirectory(tmpFile.getParent() + "/",null);//创建输出目录  
    26                     OutputStream out = null;  
    27                     try{  
    28                         out = new FileOutputStream(tmpFile);  
    29                         int length = 0;  
    30                           
    31                         byte[] b = new byte[2048];  
    32                           
    33                         while((length = tarIn.read(b)) != -1){  
    34                             out.write(b, 0, length);  
    35                         }  
    36                       
    37                     }catch(IOException ex){  
    38                         throw ex;  
    39                     }finally{  
    40                           
    41                         if(out!=null)  
    42                             out.close();  
    43                     }  
    44                 }
    45             }  
    46         }catch(IOException ex){  
    47             throw new IOException("解压归档文件出现异常",ex);  
    48         } finally{  
    49             try{  
    50                 if(tarIn != null){  
    51                     tarIn.close();  
    52                 }  
    53             }catch(IOException ex){  
    54                 throw new IOException("关闭tarFile出现异常",ex);  
    55             }  
    56         }  
    57     }  

    使用到的包头有:

     1 import java.io.BufferedInputStream;
     2 import java.io.File;
     3 import java.io.FileInputStream;
     4 import java.io.FileOutputStream;
     5 import java.io.IOException;
     6 import java.io.InputStream;
     7 import java.io.OutputStream;
     8 
     9 import java.nio.charset.Charset;
    10 import java.util.Enumeration;
    11 import java.util.zip.GZIPInputStream;
    12 import java.util.zip.ZipEntry;
    13 import java.util.zip.ZipFile;
    14 
    15 import org.apache.tools.tar.TarEntry;  
    16 import org.apache.tools.tar.TarInputStream;  
    17 import org.apache.tools.tar.TarOutputStream;  
  • 相关阅读:
    Ajax 一
    Ajax
    回调函数2
    回调函数
    mysql_fetch_row mysql_fetch_array
    几款主流PHP框架的优缺点评比
    关于PHP 7你必须知道的五件事
    10个实用的PHP正则表达式
    PHP实现四种基本排序算法
    10个最佳的PHP图像操作库
  • 原文地址:https://www.cnblogs.com/scw2901/p/4379143.html
Copyright © 2020-2023  润新知