Development Android

//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 GetFileList(String zipFileString, boolean bContainFolder, boolean bContainFile)throws Exception {
    
    android.util.Log.v("XZip", "GetFileList(String)");
    
    java.util.List fileList = new java.util.ArrayList();
    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 {
    
  }
}