Mega Code Archive

 
Categories / Android / Development
 

Zip Util

//package com.softright.tools; import android.util.Log; /**  * Android Zip?????  * @author lemon  * @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 boolean 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()) {         szName = szName.substring(0, szName.length() - 1);         java.io.File folder = new java.io.File(outPathString + java.io.File.separator + szName);         folder.mkdirs();       } else {         try{         java.io.File file = new java.io.File(outPathString + java.io.File.separator + szName);         file.createNewFile();         java.io.FileOutputStream out = new java.io.FileOutputStream(file);         int len;         byte[] buffer = new byte[1024];         while ((len = inZip.read(buffer)) != -1) {           out.write(buffer, 0, len);           out.flush();         }         out.close();         }catch(Exception e){           Log.d("UI","unzip error!");         }       }     }         inZip.close();     return true;   }         /**    * ????,???    * @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 {        } }