`

ZIP打包

    博客分类:
  • java
阅读更多
package com.snda.swp.util;

import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Enumeration;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.compress.archivers.zip.ZipFile;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;

public class Main {
 private static String src = "D:\\apache-tomcat-6.0.28\\webapps\\swp1\\upload\\temporary\\我的站点";

 private static String dst = "D:\\apache-tomcat-6.0.28\\webapps\\swp1\\upload\\compress\\cc.zip";

 public static void main(String[] args) throws FileNotFoundException, Exception {
  Main main = new Main(dst);
  main.createZipOut();
  main.packToolFiles(src, "");
  main.closeZipOut();
  
  //main = new Main("c:/test2.zip");
  //main.createZipOut();
  //main.packToolFiles("C:/test", "test");
  //main.closeZipOut();
  
  //Main.unZipToFolder("c:/test1.zip", "c:/test1");
  //Main.unZipToFolder("c:/test2.zip", "c:/test2");
 }

 private OutputStream out = null;

 private BufferedOutputStream bos = null;

 private ZipArchiveOutputStream zaos = null;

 private String zipFileName = null;

 public Main(String zipname) {
  this.zipFileName = zipname;
 }

 public void createZipOut() throws FileNotFoundException, IOException {
  File f = new File(zipFileName);
  out = new FileOutputStream(f);
  bos = new BufferedOutputStream(out);
  zaos = new ZipArchiveOutputStream(bos);
  zaos.setEncoding("GBK");

 }

 public void closeZipOut() throws Exception {
  zaos.flush();
  zaos.close();

  bos.flush();
  bos.close();

  out.flush();
  out.close();
 }

 /**
  * 把一个目录打包到zip文件中的某目录
  *
  * @param dirpath
  *            目录绝对地址
  * @param pathName
  *            zip中目录
  */
 public void packToolFiles(String dirpath, String pathName) throws FileNotFoundException,
 IOException {
  if (StringUtils.isNotEmpty(pathName)) {
   pathName = pathName + File.separator;
  }
  packToolFiles(zaos, dirpath, pathName);
 }

 /**
  * 把一个目录打包到一个指定的zip文件中
  *
  * @param dirpath
  *            目录绝对地址
  * @param pathName
  *            zip文件抽象地址
  */
 public void packToolFiles(ZipArchiveOutputStream zaos, String dirpath, String pathName)
 throws FileNotFoundException, IOException {

  ByteArrayOutputStream tempbaos = new ByteArrayOutputStream();
  BufferedOutputStream tempbos = new BufferedOutputStream(tempbaos);

  File dir = new File(dirpath);
  // 返回此绝对路径下的文件
  File[] files = dir.listFiles();
  if (files == null || files.length < 1) {
   return;
  }
  for (int i = 0; i < files.length; i++) {
   // 判断此文件是否是一个文件夹
   if (files[i].isDirectory()) {
    packToolFiles(zaos, files[i].getAbsolutePath(), pathName + files[i].getName()
    + File.separator);
   } else {
    zaos.putArchiveEntry(new ZipArchiveEntry(pathName + files[i].getName()));
    IOUtils.copy(new FileInputStream(files[i].getAbsolutePath()), zaos);
    zaos.closeArchiveEntry();

   }

  }

  tempbaos.flush();
  tempbaos.close();

  tempbos.flush();
  tempbos.close();
 }

 /**
  * 把一个zip文件解压到一个指定的目录中
  *
  * @param zipfilename
  *            zip文件抽象地址
  * @param outputdir
  *            目录绝对地址
  */
 public static void unZipToFolder(String zipfilename, String outputdir) throws IOException {
  File zipfile = new File(zipfilename);
  if (zipfile.exists()) {
   outputdir = outputdir + File.separator;
   FileUtils.forceMkdir(new File(outputdir));

   ZipFile zf = new ZipFile(zipfile, "GBK");
   Enumeration zipArchiveEntrys = zf.getEntries();
   while (zipArchiveEntrys.hasMoreElements()) {
    ZipArchiveEntry zipArchiveEntry = (ZipArchiveEntry) zipArchiveEntrys.nextElement();
    if (zipArchiveEntry.isDirectory()) {
     FileUtils.forceMkdir(new File(outputdir + zipArchiveEntry.getName()
     + File.separator));
    } else {
     IOUtils.copy(zf.getInputStream(zipArchiveEntry), FileUtils
     .openOutputStream(new File(outputdir + zipArchiveEntry.getName())));
    }
   }
  } else {
   throw new IOException("指定的解压文件不存在:\t" + zipfilename);
  }
 }
}
分享到:
评论

相关推荐

    zip打包工具

    360zip打包工具

    zip打包java实现方法

    zip打包java实现方法,其中包括打包,解压

    java Zip打包完整例子

    Java中的Zip打包主要涉及到对文件或文件夹进行压缩处理,这是一种常见的数据存储和传输方式。在Java中,我们可以使用内置的`java.util.zip`包来实现这个功能。下面将详细介绍如何使用Java进行Zip打包,以及涉及到的...

    zip打包工具完美编码

    在IT行业中,"zip打包工具完美编码"是一个关于文件压缩和编码处理的重要主题。这篇文章将深入探讨zip格式的打包工具及其在处理不同编码方式时如何实现完美编码。 首先,我们来了解一下什么是zip打包工具。Zip是一种...

    cab.zip 打包工具

    《深入理解cab.zip打包工具》 在信息技术领域,文件打包工具是不可或缺的一部分,它们能够将多个文件合并成一个单一的文件,便于传输、存储和分发。cab.zip打包工具就是这样一种实用工具,它结合了两种常见的压缩...

    ZIP打包代码

    ZIP打包是一种常见的文件压缩格式,广泛应用于数据存储、文件传输和软件分发。它通过将多个文件合并到一个单一的ZIP文件中,可以减少文件占用的磁盘空间,提高传输效率,并便于管理。ZIP格式是开放标准,由Phil Katz...

    文件转换为zip打包文件

    "文件转换为zip打包文件"是常见的操作之一,它能够将多个独立的文件或整个文件夹整合到一个单一的zip文件中。下面将详细阐述zip格式、打包过程以及其在实际应用中的优势。 首先,zip是一种流行的文件压缩格式,由...

    PHP_ZIP打包支持

    在PHP编程环境中,`ZIP`打包支持是一项非常实用的功能,它允许开发者将多个文件或整个目录打包成一个`.zip`文件,便于传输、存储或备份。`PHP ZIP`扩展是实现这一功能的关键,它提供了丰富的函数和类来处理`.zip`...

    java打包zip(超级简单)

    因项目需求,需要在线生成world文档,并且需要批量生成world,那么就可以用zip打包所有world进行下载,这里提供的是一个简单的demo,如需了解在线生成文件,并打包到zip,可以问我

    linux下zip打包shell脚本

    linux下zip打包shell脚本,可根据具体的内容自己给定参数

    java压缩文件,zip打包

    应用java来压缩需要打包的文件,在系统管理中将毛哥路径或者某个文件夹压缩成zip包

    android打包zip

    下面将详细解释如何在Android中进行ZIP打包,并探讨相关知识点。 首先,我们要理解ZIP文件格式。ZIP是一种广泛使用的数据压缩和归档格式,它能够将多个文件和目录打包到一个单一的文件中,方便传输和存储。在...

    自己写的一个zip打包工具类

    NULL 博文链接:https://xsl2007.iteye.com/blog/737245

    apacheZIP打包工具

    Apache ZIP打包工具是一款在IT行业中广泛使用的实用程序,主要用于文件和文件夹的打包与压缩。在Java开发环境中,它尤其重要,因为Java的许多项目都依赖于ZIP格式来组织资源、库和部署构件。以下是对Apache ZIP打包...

    Windows下的命令行使用的zip命令

    Windows下的命令行使用的zip命令,用法与linux用法一致。 后端程序打包文件调用。 如果你装了windows版的Oracle,那你可以在Oracle\product\11.2.0\dbhome_1\BIN目录下找到该zip命令。

    Java实现将多目录多层级文件打成ZIP包,以及解压ZIP包

    - 首先,需要导入`java.util.zip`包中的`ZipOutputStream`和`ZipEntry`类,它们分别用于创建ZIP输出流和表示ZIP包内的每个条目(文件或目录)。 - 使用`File`类遍历指定的目录及其子目录,获取所有需要打包的文件...

    linux c ZIP文件打包的实现处理以及XML、ftp处理等

    linux c ZIP文件打包的实现处理以及XML、ftp处理,具体见源码处理方式。有疑问请留言

    7zip jar包资源

    7zip jar包资源 sevenzipjbinding-4.65-1.04-rc-extr-only-AllWindows.zip 包含: sevenzipjbinding-AllPlatforms.jar sevenzipjbinding.jar

    asp文件打包成zip组件

    在ASP中,有时我们需要将多个文件打包成一个ZIP文件以便于传输或存储。这个“asp文件打包成zip组件”可能是一个自定义的ASP组件或者类库,它允许开发者在ASP应用程序中实现文件压缩的功能。 首先,让我们了解一下...

    网站、APP、社交网站真实头像打包2000个.zip

    "网站、APP、社交网站真实头像打包2000个.zip" 是一个包含大量真实用户头像的资源集合,适用于各种应用场景。 这个压缩包包含了2000个真实的用户头像,这些头像是从实际用户中提取或模拟的真实图像,旨在为新注册...

Global site tag (gtag.js) - Google Analytics