现在的位置: 首页 > 综合 > 正文

android通过org.apache.tools.zip解压zip压缩文件,支持中文名

2013年01月24日 ⁄ 综合 ⁄ 共 1512字 ⁄ 字号 评论关闭

    由于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();
	}

抱歉!评论已关闭.