android 解压 ZIP 文件

4,813 阅读1分钟
原文链接: blog.csdn.net

在AndroidManifest.xml里添加权限:

 

工具类:

public class ZIP {  
    public ZIP(){  
          
    }  
      
     /**   
     * DeCompress the ZIP to the path   
     * @param zipFileString  name of ZIP   
     * @param outPathString   path to be unZIP  
     * @throws Exception   
     */    
    public static void UnZipFolder(String zipFileString, String outPathString) throws Exception {    
        ZipInputStream inZip = new ZipInputStream(new FileInputStream(zipFileString));    
        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);    
                File folder = new File(outPathString + File.separator + szName);    
                folder.mkdirs();    
            } else {    
            
                File file = new File(outPathString + File.separator + szName);    
                file.createNewFile();    
                // get the output stream of the file    
                FileOutputStream out = new 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();    
            }    
        }   
        inZip.close();    
    }  
        
    /**   
     * Compress file and folder  
     * @param srcFileString   file or folder to be Compress  
     * @param zipFileString   the path name of result ZIP  
     * @throws Exception   
     */    
    public static void ZipFolder(String srcFileString, String zipFileString)throws Exception {    
        //create ZIP   
        ZipOutputStream outZip = new ZipOutputStream(new FileOutputStream(zipFileString));    
        //create the file   
        File file = new File(srcFileString);    
        //compress  
        ZipFiles(file.getParent()+File.separator, file.getName(), outZip);    
        //finish and close  
        outZip.finish();    
        outZip.close();    
    }  
      
    /**   
     * compress files  
     * @param folderString   
     * @param fileString   
     * @param zipOutputSteam   
     * @throws Exception   
     */    
    private static void ZipFiles(String folderString, String fileString, ZipOutputStream zipOutputSteam)throws Exception{    
        if(zipOutputSteam == null)    
        return;    
        File file = new File(folderString+fileString);    
        if (file.isFile()) {    
            ZipEntry zipEntry =  new ZipEntry(fileString);    
            FileInputStream inputStream = new 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 {    
            //folder  
            String fileList[] = file.list();    
            //no child file and compress    
            if (fileList.length <= 0) {    
                ZipEntry zipEntry =  new ZipEntry(fileString+File.separator);    
                zipOutputSteam.putNextEntry(zipEntry);    
                zipOutputSteam.closeEntry();                    
            }    
            //child files and recursion    
            for (int i = 0; i < fileList.length; i++) {    
                ZipFiles(folderString, fileString+java.io.File.separator+fileList[i], zipOutputSteam);    
            }//end of for    
        }      
    }  
      
    /**   
     * return the InputStream of file in the ZIP  
     * @param zipFileString  name of ZIP   
     * @param fileString     name of file in the ZIP   
     * @return InputStream   
     * @throws Exception   
     */    
    public static InputStream UpZip(String zipFileString, String fileString)throws Exception {    
        ZipFile zipFile = new ZipFile(zipFileString);    
        ZipEntry zipEntry = zipFile.getEntry(fileString);    
        return zipFile.getInputStream(zipEntry);    
    }    
      
    /**   
     * return files list(file and folder) in the ZIP  
     * @param zipFileString     ZIP name  
     * @param bContainFolder    contain folder or not  
     * @param bContainFile      contain file or not  
     * @return   
     * @throws Exception   
     */    
    public static List GetFileList(String zipFileString, boolean bContainFolder, boolean bContainFile)throws Exception {    
        List fileList = new ArrayList();    
        ZipInputStream inZip = new ZipInputStream(new FileInputStream(zipFileString));    
        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);    
                File folder = new File(szName);    
                if (bContainFolder) {    
                    fileList.add(folder);    
                }    
            
            } else {    
                File file = new File(szName);    
                if (bContainFile) {    
                    fileList.add(file);    
                }    
            }    
        }  
        inZip.close();    
        return fileList;    
    }    
}