网上有关压缩和解压zip包的博文一大堆,我随便找了一个,看了看,按照自己的需要修改了一下,与各位分享一下,希望各位大神指正:
package com.wangpeng.utill; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; 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; import java.util.zip.ZipOutputStream; /** * @author wangpeng */ public class ToolOfZip { /** * 解压zip包 * @param inputPath 被解压的zip包的路径 * @param targetPath 被解压到的目录 * @param isClear 是否清楚已有目录 */ public static void unZip(String inputPath,String targetPath, boolean isClear) { try { if (null == targetPath || "".equals(targetPath)) { targetPath = inputPath.substring(0,inputPath.lastIndexOf(".")); } ZipFile zipFile = new ZipFile(new File(inputPath)); Enumeration<? extends ZipEntry> entrys = zipFile.entries(); while (entrys.hasMoreElements()) { ZipEntry entry = entrys.nextElement(); String name = entry.getName();// aaa\testdir\xxxxx\eee.txt String strTargetPath=targetPath+"/"+name; String strTargetDir=strTargetPath.substring(0, strTargetPath.lastIndexOf(File.separator)); if (entry.isDirectory()) { File dir = new File(strTargetPath); if (!dir.exists()) { dir.mkdirs(); } } else { File dir = new File(strTargetDir); if (!dir.exists()) { dir.mkdirs(); } File file = new File(strTargetPath); if (file.exists() && isClear) { file.delete(); } if (!file.exists()) { InputStream in = zipFile.getInputStream(entry); ToolOfFile.copyFile(in, file.getAbsolutePath()); } } } } catch (ZipException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } /** * 创建ZIP文件 * * @param sourcePath * 文件或文件夹路径 * @param zipPath * 生成的zip文件存在路径(包括文件名) */ public static void createZip(String sourcePath, String zipPath) { FileOutputStream fos = null; ZipOutputStream zos = null; try { fos = new FileOutputStream(zipPath); zos = new ZipOutputStream(fos); writeZip(new File(sourcePath), "", zos); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { if (zos != null) { zos.close(); } } catch (IOException e) { e.printStackTrace(); } } } private static void writeZip(File inFile, String parentPath, ZipOutputStream zipOutStream) { if (inFile.exists()) { if (inFile.isDirectory()) { parentPath += inFile.getName() + File.separator; File[] files = inFile.listFiles(); for (File file : files) { writeZip(file, parentPath, zipOutStream); } } else { FileInputStream fileInStream = null; try { fileInStream = new FileInputStream(inFile); ZipEntry entry = new ZipEntry(parentPath + inFile.getName()); zipOutStream.putNextEntry(entry); byte[] buff = new byte[1024]; int len; while ((len = fileInStream.read(buff)) != -1) { zipOutStream.write(buff, 0, len); zipOutStream.flush(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fileInStream != null) { fileInStream.close(); } } catch (IOException e) { e.printStackTrace(); } } } } } public static void main(String[] args) { String oldPath = "F:/test/ddd/"; String newPath = "F:/test/ccc.zip"; // ToolOfZip.createZip(oldPath, newPath); //ToolOfZip.unZip(newPath, null, false); System.out.println(); System.out.println("---------ok----------"); } }
原文地址:http://blog.csdn.net/w2865673691/article/details/33336731