WEB开发网
开发学院手机开发Android 开发 Android 利用Java实现压缩与解压缩(zip、gzip)支... 阅读

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

//使用指定校验和创建输出流

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 压缩包路径

上一页  6 7 8 9 10 11 12 13 14 15  下一页

Tags:Android 利用 Java

编辑录入:coldstar [复制链接] [打 印]
赞助商链接