由于java自带的解压缩包不能在压缩文件中存在中文名,使用apache的开发包可以支持中文。
首先需要下载org.apache.tools.zip的jar包【下载地址在此】,将此jar包复制到工程的libs目录下,在代码头部需要导入下面的包:
import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile;
下面贴出解压缩代码:
/** * 使用 org.apache.tools.zip.ZipFile 解压文件,它与 java 类库中的 java.util.zip.ZipFile * 使用方式是一新的,只不过多了设置编码方式的 接口。 * * 注,apache 没有提供 ZipInputStream 类,所以只能使用它提供的ZipFile 来读取压缩文件。 * * @param archive * 压缩包路径 * @param decompressDir * 解压路径 * @throws IOException * @throws FileNotFoundException * @throws ZipException */ public static void readByApacheZipFile(String archive, String decompressDir) throws IOException, FileNotFoundException, ZipException { BufferedInputStream bi; ZipFile zf = new ZipFile(archive, "GBK");// 支持中文 Enumeration e = zf.getEntries(); while (e.hasMoreElements()) { ZipEntry ze2 = (ZipEntry) e.nextElement(); String entryName = ze2.getName(); String path = decompressDir + "/" + entryName; if (ze2.isDirectory()) { Log.d("readByApacheZipFile", "正在创建解压目录 - " + entryName); File decompressDirFile = new File(path); if (!decompressDirFile.exists()) { decompressDirFile.mkdirs(); } } else { Log.d("readByApacheZipFile", "正在创建解压文件 - " + entryName); String fileDir = path.substring(0, path.lastIndexOf("/")); File fileDirFile = new File(fileDir); if (!fileDirFile.exists()) { fileDirFile.mkdirs(); } BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream(decompressDir + "/" + entryName)); bi = new BufferedInputStream(zf.getInputStream(ze2)); byte[] readContent = new byte[1024]; int readCount = bi.read(readContent); while (readCount != -1) { bos.write(readContent, 0, readCount); readCount = bi.read(readContent); } bos.close(); } } zf.close(); }