当前位置: 代码迷 >> 综合 >> Android zip解压
  详细解决方案

Android zip解压

热度:66   发布时间:2024-01-21 17:13:13.0
package com.su.mywifi.util;/** * 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)"+zipFileString+"  "+outPathString);  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 {  }  }  


  相关解决方案