研究了一下Android上Zip的用法,写了个类把常用的几种方法写了出来

公共方法列表
static List<File>

GetFileList(StringzipFileString, boolean bContainFolder, booleanbContainFile)

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

zipFileString : 压缩包文件

bContainFolder : 是否包括文件夹

bContainFile : 是否包括文件

static InputStream

UpZip(StringzipFileString, StringfileString)

返回压缩包中的文件InputStream

zipFileString : 压缩包文件

fileString : 要解压的文件名

staticvoid

UnZipFolder(StringzipFileString, StringoutPathString)

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

zipFileString : 压缩包文件

outPathString : 要输出的路径

staticvoid

ZipFolder(StringsrcFileString, StringzipFileString)

压缩文件,文件夹

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

zipFileString : 输出压缩包的路径

/** * 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 widgetszName = 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 whileinZip.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 widgetszName = 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 filejava.io.FileOutputStream out = new java.io.FileOutputStream(file);int len;byte[] buffer = new byte[1024];// read (len) bytes into bufferwhile ((len = inZip.read(buffer)) != -1) {// write (len) byte from buffer at the position 0out.write(buffer, 0, len);out.flush();}out.close();}}//end of whileinZip.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 funcpublic void finalize() throws Throwable {}}

更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. WINDOWS下ECLIPSE ANDROID源码SETTINGS模块调试
  4. android aidl
  5. Android初始化语言 (init.*.rc、init.conf文件格式)
  6. 关于cocos2dx的eclipse的"serializing cdt project settings"解
  7. android adb 通过adb连接制定设备
  8. Android文件浏览器的开发
  9. Android:JNI的简单使用

随机推荐

  1. Jetpack插件化学习之AndroidX--Android项
  2. Android(安卓)ADB工具使用
  3. Android自学笔记:应用程序基本原理
  4. Android中XML解析-SAX解析
  5. Android(安卓)判断应用 第一次安装启动
  6. AsyncTask的用法
  7. 新书内容连载(3):Android(安卓)SDK中常用命
  8. android中activity的四种加载模式
  9. Android中文文档:安装SDK
  10. 澄迈NIIT Android(安卓)实训 后5天学习an