Java Zip/Unzip Files 记录

最近项目中使用Java实现zip/unzip XML文件的功能,Java自带的API可以方便实现文件的压缩和解压缩,记录一下相关代码。

  1. 以源文件名zip压缩源文件到目标文件
public void zip(File src, File dest){
    InputStream in = null;
    ZipOutputStream zos= null;
    try {
        zos = new ZipOutputStream(new FileOutputStream(dest));
        ZipEntry ze= new ZipEntry(src.getName());
        zos.putNextEntry(ze);
        in = new FileInputStream(src);
        IOUtils.copy(in,zos);
    } catch (IOException e) {
        LOG.error("fail to zip file: " + src.getName() + " to : " + dest.getName());
        throw e;
    } finally {
        if(null != zos){
            try {
                zos.closeEntry();
            } catch (IOException ex){
            }
        }
        IOUtils.closeQuietly(in);
        IOUtils.closeQuietly(zos);
}
  1. 从源文件zip解压所有文件到目标文件夹
 public void unZip(File file, String outputFolder){
     File folder = new File(outputFolder);
     if(folder.exists() && folder.isFile()){
         throw IllegalArgumentException("Not an exists folder");
     }
     //create output directory is not exists
     if(!folder.exists() && !folder.mkdir()){
         throw IllegalStatusException("fail to create dest folder");
     }
     InputStream in = null; OutputStream out = null;
     ZipFile zipFile = new ZipFile(file);
     Enumeration emu = zipFile.entries();
     while(emu.hasMoreElements()){
           ZipEntry entry = (ZipEntry)emu.nextElement();
           //建立目录
           if (entry.isDirectory()){
                new File(outputFolder + entry.getName()).mkdirs();
                    continue;
           }
           //文件拷贝
           InputStream is = zipFile.getInputStream(entry);
           File file = new File(outputFolder + entry.getName());
           //注意:zipfile读取文件是随机读取的,可能先读取一个文件,再读取文件夹,所以可能要先创建目录
           File parent = file.getParentFile();
           if(parent != null && (!parent.exists())){
               parent.mkdirs();
           }
           out = new FileOutputStream(file);
           IOUtils.closeQuietly(in);
           IOUtils.closeQuietly(out);
       }
    }catch(IOException ex){
       LOG.error(ex.getMessage());
       throw ex;
    } finally {
       if(null != zipFile){
           try{
               zipFile.close();
           } catch (IOException e) {

           }
       }
       IOUtils.closeQuietly(in);
       IOUtils.closeQuietly(out);
    }
}

这代码最主要就是文件太大的话,IOUtils的copy耗CPU比较高。

时间: 2024-12-18 06:55:35

Java Zip/Unzip Files 记录的相关文章

java zip压缩和解压(支持中文)

package com.xeon.mis.utils; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.util.Enumeration; impor

java发送邮件监控并记录异常

根据项目管理的内容,我们一般在立项之前,需要对项目可行性进行分析.论证.评估,最终需要出具<项目可行性分析报告>,论证项目在技术.经济.运行环境以及其他项目相关方面的可行性.效益.必要性.理论很好,避免项目失败.因为作可行性分析只占项目投资的0.5%~1%,如果能在前期就能把问题论证好了,当然是功德无量的一件事情.但是在实践中,项目可行性却无法起到相应的作用.在项目中,人是最大的主观因素,人也是最大的决定因素.所以也要从人讲起:客户:客户是投资人,是项目发起人.客户虽然不知道项目如何实现,实现

使用zip/unzip压缩、解压缩文件

今天项目升级模块中有需要进行解压缩操作,本来打算使用创建进程调用winrar工具的方式来解压,在VS2008环境下也是能跑通的,但是因为产品升级程序是以windows服务的方式运行的,使用这个方式怎么都行不通,进程能正常退出,但是就是解压不出来,进程管理器中也显示winrar进程没有退出,可能导致解压后的文件未释放,至于具体原因,暂时还未明了,希望有经验的朋友指点一下!但是项目还得继续做啊,因此只能换其他方式了. 通过在网上查找资料,找到了这个东东,http://www.codeproject.

压缩 &amp; 解压缩 命令汇总:tar、zip &amp; unzip、

1. tar命令详解     格式:tar [-cxtzjvfpPN] 文件与目录 -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个. 下面的参数是根据需要在压缩或解压档案时可选的. -z:有gzip属性的 -j:有bz2属性的 -Z:有compress属性的 -v:显示所有过程 -O:将文件解开到标准输出 参数-f是必须的 -f: 使用档案名字,切记,

linux笔记 文件的压缩与解压缩gzip、bzip2、xz、zip&unzip、tar打包、tar打包和压缩并用

压缩文件意义节省网络传输带宽,降低磁盘使用率.但会使用一定的cpu. 1.gzip 不支持压缩目录,gzip后直接跟文件名,在当前目录下压缩时,原文件会消失. #gzip filename 指定压缩目录:#gzip -c 123.txt > /tmp/123.txt.gz 将当前目录下123.txt文件压缩到tmp目录下名字为123.txt.gz 解压缩:#gzip -d file.gz #zcat file.gz  查看.gz文件内容 2.bzip2 不支持压缩目录,bzip2后可直接跟文件名

Java学习-007-Log4J 日志记录配置文件详解及实例源代码

此文主要讲述在初学 Java 时,常用的 Log4J 日志记录配置文件详解及实例源代码整理.希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:2015-1-30 13:54:02,请知悉. 所需的 jar 包下载链接为:http://yunpan.cn/cKE56sxqtQCfP  访问密码 63d8 有关 Log4J 日志文件中日志级别及文件配置的详细情况,在 Log4J 的配置文件(xml.properties)中有详细的介绍,敬请参阅!

java中的List记录是否完全匹配方法

今天要说的是给List分组,然后用Map来封装,可能你看了以后还是有一些模糊. 先看一下项目结构图: User类是一个VO类,主要逻辑还是在MapTestBak上面. 运行效果: 原理图: 1.在starsList中有两组人,共三人 2.在dolList中有一组人,共两人 3.经过marched操作,最后匹配到一组人到result中.即第一组人. 原理很简单. =================================================== 源码部分: ==========

Linux zip unzip

yum install zip/unzip zip 压缩 zip (指定压缩完后的名称) unzip(解压缩) zip -r (可以压缩目录) unzip解压

wqy-zenhei, firefox-i18n-zh-cn, flashplugin, wqy-microhei ttf-arphic-ukai ttf-arphic-uming file-roller unrar zip unzip p7zip arj etc

yaourt -S wqy-zenhei, firefox-i18n-zh-cn, flashplugin, wqy-microhei ttf-arphic-ukai ttf-arphic-uming file-roller unrar zip unzip p7zip arj unace librsvg arj unace librsvg mesa gimp evince ntfs-3g Caution, after installing wqy-zenhei, Chinese characto