解压与压缩zip及apk包
package util;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream; import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipUtilsCompress {
//public static final String EXT = ".zip";
public static final String EXT = ".apk";
private static final String BASE_DIR = "";
// ?ûºÅ"/"ÓÃÀ?×?ΪÄ?Â??êÊ?ÅÐ?Ï?û
private static final String PATH = "/";
private static final int BUFFER = 1024;
public static void compress(File srcFile) throws Exception {
String name = srcFile.getName();
String basePath = srcFile.getParent();
//String destPath = basePath + name + EXT;
String destPath = basePath + File.separator + name + EXT;
compress(srcFile, destPath);
}
public static void compress(File srcFile, File destFile) throws
Exception {
// ?ÔÊä?öÎÄ?þ×öCRC32Ð?Ñé
CheckedOutputStream cos = new CheckedOutputStream(new FileOutputStream(
destFile), new CRC32());
ZipOutputStream zos = new ZipOutputStream(cos);
compress(srcFile, zos, BASE_DIR);
zos.flush();
zos.close();
}
public static void compress(File srcFile, String destPath) throws
Exception {
compress(srcFile, new File(destPath));
}
private static void compress(File srcFile, ZipOutputStream zos,
String basePath) throws Exception {
if (srcFile.isDirectory()) {
compressDir(srcFile, zos, basePath);
} else {
compressFile(srcFile, zos, basePath);
}
}
public static void compress(String srcPath) throws Exception {
File srcFile = new File(srcPath);
compress(srcFile);
}
public static void compress(String srcPath, String destPath)
throws Exception {
File srcFile = new File(srcPath);
compress(srcFile, destPath);
}
private static void compressDir(File dir, ZipOutputStream zos,
String basePath) throws Exception {
File[] files = dir.listFiles();
// ?????ÕÄ?Â?
if (files.length < 1) {
ZipEntry entry = new ZipEntry(basePath + dir.getName() + PATH);
zos.putNextEntry(entry);
zos.closeEntry();
}
for (File file : files) {
// µÝ?éÑ?Ëõ
compress(file, zos, basePath + dir.getName() + PATH);
}
}
private static void compressFile(File file, ZipOutputStream zos,
String dir)
throws Exception {
String dirName = dir + file.getName();
String[] dirNameNew = dirName.split("/");
StringBuffer buffer = new StringBuffer();
if(dirNameNew.length > 1){
for(int i = 1; i < dirNameNew.length;i++){
buffer.append(PATH);
buffer.append(dirNameNew[i]);
}
}else{
buffer.append(PATH);
}
ZipEntry entry = new ZipEntry(buffer.toString().substring(1));
//ZipEntry entry = new ZipEntry(dir + file.getName());
System.out.println("******" + dir + file.getName());
zos.putNextEntry(entry);
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
file));
int count;
byte data[] = new byte[BUFFER];
while ((count = bis.read(data, 0, BUFFER)) != -1) {
zos.write(data, 0, count);
}
bis.close();
zos.closeEntry();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
// Ñ?ËõÎÄ?þ
// try {
// ZipUtilsCompress.compress("d:\\test\\test_imsi1.apk"); // System.out.println("Ñ?ËõÎÄ?þ?É????"); // } catch (Exception e) {
// // TODO Auto-generated catch block // e.printStackTrace();
// }
// Ñ?ËõÄ?Â?
try {
ZipUtilsCompress.compress("d:\\ff");
System.out.println("Ñ?ËõÄ?Â??É????");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package util;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.CRC32;
import java.util.zip.CheckedInputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class ZipUtilsDecompress {
// public static final String EXT = ".zip";
// private static final String BASE_DIR = "";
private static final String PATH = File.separator;
private static final int BUFFER = 1024;
public static void decompress(String srcPath) throws Exception {
File srcFile = new File(srcPath);
decompress(srcFile);
}
public static void decompress(File srcFile) throws Exception {
String basePath = srcFile.getParent();
decompress(srcFile, basePath);
}
public static void decompress(File srcFile, File destFile) throws
Exception {
CheckedInputStream cis = new CheckedInputStream(new FileInputStream(
srcFile), new CRC32());
ZipInputStream zis = new ZipInputStream(cis);
decompress(destFile, zis);
zis.close();
}
public static void decompress(File srcFile, String destPath)
throws Exception {
decompress(srcFile, new File(destPath));
}
public static void decompress(String srcPath, String destPath)
throws Exception {
File srcFile = new File(srcPath);
decompress(srcFile, destPath);
}
private static void decompress(File destFile, ZipInputStream zis)
throws Exception {
ZipEntry entry = null;
while ((entry = zis.getNextEntry()) != null) {
// ÎÄ?þ
String dir = destFile.getPath() + File.separator + entry.getName();
File dirFile = new File(dir);
// ÎÄ?þ?ì?é
fileProber(dirFile);
if (entry.isDirectory()) {
dirFile.mkdirs();
} else {
decompressFile(dirFile, zis);
}
zis.closeEntry();
}
}
private static void fileProber(File dirFile) {
File parentFile = dirFile.getParentFile();
if (!parentFile.exists()) {
// µÝ?éÑ?ÕÒÉÏ??Ä?Â?
fileProber(parentFile);
parentFile.mkdir();
}
}
private static void decompressFile(File destFile, ZipInputStream zis)
throws Exception {
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(destFile));
int count;
byte data[] = new byte[BUFFER];
while ((count = zis.read(data, 0, BUFFER)) != -1) {
bos.write(data, 0, count);
}
bos.close();
}
public static void main(String[] args){
// TODO Auto-generated method stub
// ?âÑ?µ?Ö???Ä?Â?
try {
ZipUtilsDecompress.decompress("d:\\test_imsi222.apk", "d:\\ff");
//ZipUtils.decompress("d:\\test\\test.zip", "d:\\test\\ff");
System.out.println("?âÑ?ËõÎÄ?þµ?Ö???Ä?Â??É????");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// ?âÑ?µ?µ?Ç?Ä?Â?
// try {
// ZipUtilsDecompress.decompress("d:\\test\\test_imsi222.apk");
// System.out.println("?âÑ?ËõÎÄ?þµ?µ?Ç?Ä?Â??É????"); // } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
}