Android Zip压缩解压缩

/** 
 * Android Zip压缩解压缩 
 * @author Ren.xia 
 * @version 1.0 
 * @updated 26-七月-2010 13:04:27 
 */  
public class XZip {  
  
    public XZip(){  
  
    }  
      
    /** 
     * 取得压缩包中的 文件列表(文件夹,文件自选) 
     * @param zipFileString     压缩包名字 
     * @param bContainFolder    是否包括 文件夹 
     * @param bContainFile      是否包括 文件 
     * @return 
     * @throws Exception 
     */  
    public static java.util.List<java.io.File> GetFileList(String zipFileString, boolean bContainFolder, boolean bContainFile)throws Exception {  
          
        android.util.Log.v("XZip", "GetFileList(String)");  
          
        java.util.List<java.io.File> fileList = new java.util.ArrayList<java.io.File>();  
        java.util.zip.ZipInputStream inZip = new java.util.zip.ZipInputStream(new java.io.FileInputStream(zipFileString));  
        java.util.zip.ZipEntry zipEntry;  
        String szName = "";  
          
        while ((zipEntry = inZip.getNextEntry()) != null) {  
            szName = zipEntry.getName();  
          
            if (zipEntry.isDirectory()) {  
          
                // get the folder name of the widget  
                szName = szName.substring(0, szName.length() - 1);  
                java.io.File folder = new java.io.File(szName);  
                if (bContainFolder) {  
                    fileList.add(folder);  
                }  
          
            } else {  
                java.io.File file = new java.io.File(szName);  
                if (bContainFile) {  
                    fileList.add(file);  
                }  
            }  
        }//end of while  
          
        inZip.close();  
          
        return fileList;  
    }  
  
    /** 
     * 返回压缩包中的文件InputStream 
     * @param zipFileString     压缩文件的名字 
     * @param fileString    解压文件的名字 
     * @return InputStream 
     * @throws Exception 
     */  
    public static java.io.InputStream UpZip(String zipFileString, String fileString)throws Exception {  
        android.util.Log.v("XZip", "UpZip(String, String)");  
        java.util.zip.ZipFile zipFile = new java.util.zip.ZipFile(zipFileString);  
        java.util.zip.ZipEntry zipEntry = zipFile.getEntry(fileString);  
          
        return zipFile.getInputStream(zipEntry);  
  
    }  
      
      
    /** 
     * 解压一个压缩文档 到指定位置 
     * @param zipFileString 压缩包的名字 
     * @param outPathString 指定的路径 
     * @throws Exception 
     */  
    public static void UnZipFolder(String zipFileString, String outPathString)throws Exception {  
        android.util.Log.v("XZip", "UnZipFolder(String, String)");  
        java.util.zip.ZipInputStream inZip = new java.util.zip.ZipInputStream(new java.io.FileInputStream(zipFileString));  
        java.util.zip.ZipEntry zipEntry;  
        String szName = "";  
          
        while ((zipEntry = inZip.getNextEntry()) != null) {  
            szName = zipEntry.getName();  
          
            if (zipEntry.isDirectory()) {  
          
                // get the folder name of the widget  
                szName = szName.substring(0, szName.length() - 1);  
                java.io.File folder = new java.io.File(outPathString + java.io.File.separator + szName);  
                folder.mkdirs();  
          
            } else {  
          
                java.io.File file = new java.io.File(outPathString + java.io.File.separator + szName);  
                file.createNewFile();  
                // get the output stream of the file  
                java.io.FileOutputStream out = new java.io.FileOutputStream(file);  
                int len;  
                byte[] buffer = new byte[1024];  
                // read (len) bytes into buffer  
                while ((len = inZip.read(buffer)) != -1) {  
                    // write (len) byte from buffer at the position 0  
                    out.write(buffer, 0, len);  
                    out.flush();  
                }  
                out.close();  
            }  
        }//end of while  
          
        inZip.close();  
      
    }//end of func  
      
  
    /** 
     * 压缩文件,文件夹 
     * @param srcFileString 要压缩的文件/文件夹名字 
     * @param zipFileString 指定压缩的目的和名字 
     * @throws Exception 
     */  
    public static void ZipFolder(String srcFileString, String zipFileString)throws Exception {  
        android.util.Log.v("XZip", "ZipFolder(String, String)");  
          
        //创建Zip包  
        java.util.zip.ZipOutputStream outZip = new java.util.zip.ZipOutputStream(new java.io.FileOutputStream(zipFileString));  
          
        //打开要输出的文件  
        java.io.File file = new java.io.File(srcFileString);  
  
        //压缩  
        ZipFiles(file.getParent()+java.io.File.separator, file.getName(), outZip);  
          
        //完成,关闭  
        outZip.finish();  
        outZip.close();  
      
    }//end of func  
      
    /** 
     * 压缩文件 
     * @param folderString 
     * @param fileString 
     * @param zipOutputSteam 
     * @throws Exception 
     */  
    private static void ZipFiles(String folderString, String fileString, java.util.zip.ZipOutputStream zipOutputSteam)throws Exception{  
        android.util.Log.v("XZip", "ZipFiles(String, String, ZipOutputStream)");  
          
        if(zipOutputSteam == null)  
            return;  
          
        java.io.File file = new java.io.File(folderString+fileString);  
          
        //判断是不是文件  
        if (file.isFile()) {  
  
            java.util.zip.ZipEntry zipEntry =  new java.util.zip.ZipEntry(fileString);  
            java.io.FileInputStream inputStream = new java.io.FileInputStream(file);  
            zipOutputSteam.putNextEntry(zipEntry);  
              
            int len;  
            byte[] buffer = new byte[4096];  
              
            while((len=inputStream.read(buffer)) != -1)  
            {  
                zipOutputSteam.write(buffer, 0, len);  
            }  
              
            zipOutputSteam.closeEntry();  
        }  
        else {  
              
            //文件夹的方式,获取文件夹下的子文件  
            String fileList[] = file.list();  
              
            //如果没有子文件, 则添加进去即可  
            if (fileList.length <= 0) {  
                java.util.zip.ZipEntry zipEntry =  new java.util.zip.ZipEntry(fileString+java.io.File.separator);  
                zipOutputSteam.putNextEntry(zipEntry);  
                zipOutputSteam.closeEntry();                  
            }  
              
            //如果有子文件, 遍历子文件  
            for (int i = 0; i < fileList.length; i++) {  
                ZipFiles(folderString, fileString+java.io.File.separator+fileList[i], zipOutputSteam);  
            }//end of for  
      
        }//end of if  
          
    }//end of func  
      
    public void finalize() throws Throwable {  
          
    }  
  
} 

公共方法列表
static List<File>

GetFileList(String zipFileString, boolean bContainFolder, boolean bContainFile)

 

取得压缩包中的文件列表(文件夹,文件自选)

zipFileString      : 压缩包文件

bContainFolder : 是否包括文件夹

bContainFile      : 是否包括文件

static InputStream

UpZip(String zipFileString, String fileString)

 

返回压缩包中的文件InputStream

zipFileString : 压缩包文件

fileString      : 要解压的文件名

static void

UnZipFolder(String zipFileString, String outPathString)

 

解压一个压缩文档 到指定位置

zipFileString    : 压缩包文件

outPathString : 要输出的路径

static void

ZipFolder(String srcFileString, String zipFileString)

 

压缩文件,文件夹

srcFileString : 要压缩的文件,文件夹的路径

zipFileString : 输出压缩包的路径


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值