java zip 工具类
发布时间:2020-12-14 23:23:24 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 package com.topsoft.websites.utils; import java.io.*;import java.util.logging.Logger;import java.util.zip.*; /** * Created by sunyameng on 1
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 package com.topsoft.websites.utils; import java.io.*; import java.util.logging.Logger; import java.util.zip.*; /** * Created by sunyameng on 14-3-10. */ public class ZipUtil { private final static Logger logger = Logger.getLogger(ZipUtil.class.getName()); private static final int BUFFER = 1024 * 10; /** * 将指定目录压缩到和该目录同名的zip文件,自定义压缩路径 * * @param sourceFilePath 目标文件路径 * @param zipFilePath 指定zip文件路径 * @return */ public static boolean zip(String sourceFilePath,String zipFilePath,String zipFileName) { boolean result = false; File source = new File(sourceFilePath); if (!source.exists()) { logger.info(sourceFilePath + " doesn't exist."); return result; } if (!source.isDirectory()) { logger.info(sourceFilePath + " is not a directory."); return result; } File zipFile = new File(zipFilePath + File.separator + zipFileName + ".zip"); if (zipFile.exists()) { logger.info(zipFile.getName() + " is already exist."); return result; } else { if (!zipFile.getParentFile().exists()) { if (!zipFile.getParentFile().mkdirs()) { logger.info("cann't create file " + zipFileName); return result; } } } logger.info("creating zip file..."); FileOutputStream dest = null; ZipOutputStream out = null; try { dest = new FileOutputStream(zipFile); CheckedOutputStream checksum = new CheckedOutputStream(dest,new Adler32()); out = new ZipOutputStream(new BufferedOutputStream(checksum)); out.setMethod(ZipOutputStream.DEFLATED); compress(source,out,source.getName()); result = true; } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if (out != null) { try { out.closeEntry(); } catch (IOException e) { e.printStackTrace(); } try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } if (result) { logger.info("done."); } else { logger.info("fail."); } return result; } private static void compress(File file,ZipOutputStream out,String mainFileName) { int index = file.getAbsolutePath().indexOf(mainFileName); String entryName = file.getAbsolutePath().substring(index); //System.out.println(entryName); if (file.isFile()) { FileInputStream fi = null; BufferedInputStream origin = null; try { fi = new FileInputStream(file); origin = new BufferedInputStream(fi,BUFFER); ZipEntry entry = new ZipEntry(entryName); out.putNextEntry(entry); byte[] data = new byte[BUFFER]; int count; while ((count = origin.read(data,BUFFER)) != -1) { out.write(data,count); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (origin != null) { try { origin.close(); } catch (IOException e) { e.printStackTrace(); } } } } else if (file.isDirectory()) { try { out.putNextEntry(new ZipEntry(entryName+File.separator)); } catch (IOException e) { e.printStackTrace(); } File[] fs = file.listFiles(); if (fs != null && fs.length > 0) { for (File f : fs) { compress(f,mainFileName); } } } } /** * 将zip文件解压到指定的目录,该zip文件必须是使用该类的zip方法压缩的文件 * * @param zipFile 要解压的zip文件 * @param destPath 指定解压到的目录 * @return */ public static boolean unzip(File zipFile,String destPath) { boolean result = false; if (!zipFile.exists()) { logger.info(zipFile.getName() + " doesn't exist."); return result; } File target = new File(destPath); if (!target.exists()) { if (!target.mkdirs()) { logger.info("cann't create file " + target.getName()); return result; } } String mainFileName = zipFile.getName().replace(".zip",""); File targetFile = new File(destPath + File.separator + mainFileName); if (targetFile.exists()) { logger.info(targetFile.getName() + " already exist."); return result; } ZipInputStream zis = null; logger.info("start unzip file ..."); try { FileInputStream fis = new FileInputStream(zipFile); CheckedInputStream checksum = new CheckedInputStream(fis,new Adler32()); zis = new ZipInputStream(new BufferedInputStream(checksum)); ZipEntry entry; while ((entry = zis.getNextEntry()) != null) { int count; byte data[] = new byte[BUFFER]; String entryName = entry.getName(); //logger.info(entryName); String newEntryName = destPath + File.separator + entryName; newEntryName=newEntryName.replaceAll("\","/"); File f = new File(newEntryName); if(newEntryName.endsWith("/")){ if(!f.exists()){ if(!f.mkdirs()) { throw new RuntimeException("can't create directory " + f.getName()); } } }else{ File temp=f.getParentFile(); if (!temp.exists()) { if (!temp.mkdirs()) { throw new RuntimeException("create file " + temp.getName() + " fail"); } } FileOutputStream fos = new FileOutputStream(f); BufferedOutputStream dest = new BufferedOutputStream(fos,BUFFER); while ((count = zis.read(data,BUFFER)) != -1) { dest.write(data,count); } dest.flush(); dest.close(); } } result = true; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (zis != null) { try { zis.close(); } catch (IOException e) { e.printStackTrace(); } } } if (result) { logger.info("done."); } else { logger.info("fail."); } return result; } public static void main(String[] args) throws IOException { // String path="D:tempB"; // ZipUtil.zip(path,"d:/temp/c","anhuigs123"); String zipfile ="D:tempcB.zip"; File zipFile = new File(zipfile); String output="D:tempc"; ZipUtil.unzip(zipFile,output); } } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |