Android 利用Java实现压缩与解压缩(zip、gzip)支持中文路径
2010-11-05 00:54:57 来源:WEB开发网//使用指定校验和创建输出流
CheckedOutputStream csum = new CheckedOutputStream(f, new CRC32());
ZipOutputStream zos = new ZipOutputStream(csum);
//支持中文
zos.setEncoding("GBK");
BufferedOutputStream out = new BufferedOutputStream(zos);
//设置压缩包注释
zos.setComment(comment);
//启用压缩
zos.setMethod(ZipOutputStream.DEFLATED);
//压缩级别为最强压缩,但时间要花得多一点
zos.setLevel(Deflater.BEST_COMPRESSION);
File srcFile = new File(src);
if (!srcFile.exists() || (srcFile.isDirectory() && srcFile.list().length == 0)) {
throw new FileNotFoundException(
"File must exist and ZIP file must have at least one entry.");
}
//获取压缩源所在父目录
src = src.replaceAll("\\", "/");
String prefixDir = null;
if (srcFile.isFile()) {
prefixDir = src.substring(0, src.lastIndexOf("/") + 1);
} else {
prefixDir = (src.replaceAll("/$", "") + "/");
}
//如果不是根目录
if (prefixDir.indexOf("/") != (prefixDir.length() - 1) && isCreateSrcDir) {
prefixDir = prefixDir.replaceAll("[^/]+/$", "");
}
//开始压缩
writeRecursive(zos, out, srcFile, prefixDir);
out.close();
// 注:校验和要在流关闭后才准备,一定要放在流被关闭后使用
System.out.println("Checksum: " + csum.getChecksum().getValue());
BufferedInputStream bi;
}
/**
* 使用 org.apache.tools.zip.ZipFile 解压文件,它与 java 类库中的
* java.util.zip.ZipFile 使用方式是一新的,只不过多了设置编码方式的
* 接口。
*
* 注,apache 没有提供 ZipInputStream 类,所以只能使用它提供的ZipFile
* 来读取压缩文件。
* @param archive 压缩包路径
更多精彩
赞助商链接