import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipException; import java.util.zip.ZipFile; public class ZipUtil { public static void unzip(String zipFile){ // 要解压文件路径 File file = new File(zipFile); if(!file.exists() || !file.isFile()){ return; } // 文件当前文件夹 String basePath = file.getParent(); // 缓冲区大小 int buffersize = 1024; int count = 0; // 缓冲区 byte[] buffer = new byte[buffersize]; try { // Zip文件 ZipFile zfile = new ZipFile(file); // 获取Zip包里的所有元素 Enumeration<ZipEntry> zips = (Enumeration<ZipEntry>) zfile.entries(); // 遍历Zip包里的所有元素 while(zips.hasMoreElements()){ // 获取文件 ZipEntry entry = zips.nextElement(); // 文件名 String name = entry.getName(); // 解压后文件的全路径 String filePath = basePath + File.separator + name; // 处理zip文件包含文件夹 if(entry.isDirectory()){ System.out.println("isDirectory"); File path = new File(filePath); if(!path.exists()){ path.mkdir(); } continue; } // 获取压缩文件输入流 InputStream in = zfile.getInputStream(entry); // 带缓冲的输入流 BufferedInputStream bis = new BufferedInputStream(in); // 带缓冲的输入流 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath)); // 从输入流中读取字节并写入输出流中 while((count = bis.read(buffer, 0, buffersize)) != -1){ bos.write(buffer, 0, count); } // 释放资源 bos.flush(); bos.close(); bos.close(); } // 关闭文件 zfile.close(); } catch (ZipException e) { } catch (IOException e) { } } public static void main(String[] args) { ZipUtil.unzip("E:\\pics.zip"); } }