package com.tomatonow.zip;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.UnsupportedEncodingException;import java.util.Enumeration;import java.util.zip.ZipEntry;import java.util.zip.ZipException;import java.util.zip.ZipFile;public class TestZip { /** * 解压缩功能. 将zipFile文件解压到folderPath目录下. * * @throws Exception */ public int upZipFile(File zipFile, String folderPath) throws ZipException, IOException { ZipFile zfile = new ZipFile(zipFile); Enumeration zList = zfile.entries(); ZipEntry ze = null; byte[] buf = new byte[1024]; while (zList.hasMoreElements()) { ze = (ZipEntry) zList.nextElement(); if (ze.isDirectory()) { String dirstr = folderPath + ze.getName(); dirstr = new String(dirstr.getBytes("utf-8"), "utf-8"); File f = new File(dirstr); continue; } OutputStream os = new BufferedOutputStream(new FileOutputStream( getRealFileName(folderPath, ze.getName()))); InputStream is = new BufferedInputStream(zfile.getInputStream(ze)); int readLen = 0; while ((readLen = is.read(buf, 0, 1024)) != -1) { os.write(buf, 0, readLen); } is.close(); os.close(); } zfile.close(); return 0; } /** * 给定根目录,返回一个相对路径所对应的实际文件名. * * @param baseDir * 指定根目录 * @param absFileName * 相对路径名,来自于ZipEntry中的name * @return java.io.File 实际的文件 */ public static File getRealFileName(String baseDir, String absFileName) { String[] dirs = absFileName.split("/"); File ret = new File(baseDir); String substr = null; if (dirs.length > 1) { for (int i = 0; i < dirs.length - 1; i++) { substr = dirs[i]; try { substr = new String(substr.getBytes("utf-8"), "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } ret = new File(ret, substr); } if (!ret.exists()) ret.mkdirs(); substr = dirs[dirs.length - 1]; try { substr = new String(substr.getBytes("utf-8"), "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } ret = new File(ret, substr); return ret; } return ret; } public static void main(String[] args) { TestZip testZip = new TestZip(); try { testZip.upZipFile(new File("/Users/bruse/Desktop/aa.zip"), "/Users/bruse/Desktop/bb"); } catch (ZipException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }} :arrow:
记得要在AndroidManifest.xml里添加权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>