// 压缩单个文件
public static void doZip(String srcpath, String zipName) throws IOException {
// 声明一个要压缩的文件
File srcfile = new File(srcpath);
if (!srcfile.exists()) {
System.err.println(“要压缩的文件不存在!”);
System.exit(1);
}
//判断父路径是否存在
File zfile=new File(zipName);
if (!zfile.getParentFile().exists()) {
zfile.getParentFile().mkdirs();//如果不存在创建父路径
}
// 封装要压缩的文件
InputStream in = new FileInputStream(srcfile);
// 封装压缩后的路径
FileOutputStream fos = new FileOutputStream(zipName); //
ZipOutputStream zout = new ZipOutputStream(fos);
// 设置一个缓冲数组
byte[] by = new byte[1024];
int len = 0;
//(默认-1) 设置压缩等级(0-9),9最高压缩比,比GZIP压缩比更大,但是速度比它慢;
//经过粗略测试,zip的7等级跟GZIP压缩比类似;
zout.setLevel(7);
// 创建ZIP条目。传入文件名(带尾缀)
ZipEntry zipEntry = new ZipEntry(srcfile.getName());
// 开始写入新的 ZIP文件条目并将流定位到条目数据的开始处
zout.putNextEntry(zipEntry);
// 每次读取1kb
while ((len = in.read(by)) != -1) {
zout.write(by, 0, len);
}
zout.closeEntry();
zout.flush();
zout.close();
in.close();
System.out.println(“压缩成功!”);
}
// 解压单个文件 public static void UnZip(String zipName) throws IOException{ File zipfile = new File(zipName); if (!zipfile.exists()) { System.err.println(“要解压的文件不存在!”); System.exit(1); } FileInputStream fis=new FileInputStream(zipfile); //封装待解压文件 ZipInputStream zis=new ZipInputStream(fis); ZipEntry zip=zis.getNextEntry(); //获取待解压文件的父路径 String parent=zipfile.getParent(); //封装解压后的路径 FileOutputStream fos=new FileOutputStream(parent+”/”+zip.getName()); byte by[]=new byte[1024]; int len; while((len=zis.read(by))!=-1){ fos.write(by, 0, len); } fos.flush(); fos.close(); zis.closeEntry(); zis.close(); System.out.println(“解压成功!”); }