zoukankan      html  css  js  c++  java
  • zip文件解压 java

    最近在做zip包的解压,遇到了问题。

    1.如何成功进行zip包的解压;

    2.如何提高zip包解压的速度。

       注:速度的提高主要体现在解压时使用的jar包,是java自带的还是apache的。听师哥说java的zip类打开zip文件的目录快,但是解压慢。apache的包解压速度快些,但是遍历zip包条目速度慢。这种说法还带考证,电脑今天卡的紧,只有回头测了。

       不过肯定的是,只有apache的包才支持带中文名文件的zip包解压。

    1.首先使用java自带的zip解压功能进行了解压,(如果压缩包中有中文名文件不能正常解压)

    代码如下:

    package com.huawei.action;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Enumeration;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipException;
    import java.util.zip.ZipFile;
    
    public class Unzip
    {
        private static final int BUFFER = 2048;
    
        public static void main(String[] args)
        {
            String filePath = "C:\test\test.zip";
            String desPath = filePath.substring(0, filePath.lastIndexOf("\"))
                    + "\";
            int count = 0;
            byte[] a = new byte[BUFFER];
            File file = new File(filePath);
            if (!file.exists())
            {
                return;
            }
            try
            {
                ZipFile zipfile = new ZipFile(file);
                Enumeration<? extends ZipEntry> enu = zipfile.entries();
                while (enu.hasMoreElements())
                {
                    ZipEntry entry = enu.nextElement();
                    //如果zip条目为目录,则直接创建
                    if (entry.isDirectory())
                    {
                        new File(desPath + entry.getName()).mkdirs();
                        continue;
                    }
                    File desFile = new File(desPath + entry.getName());
                    if (!desFile.exists())
                    {
                        desFile.createNewFile();
                    }
                    FileOutputStream fos = new FileOutputStream(desFile);
                    BufferedOutputStream bos = new BufferedOutputStream(fos, BUFFER);
                    BufferedInputStream zis = new BufferedInputStream(
                            zipfile.getInputStream(entry));
                    while ((count = zis.read(a, 0, BUFFER)) != -1)
                    {
                        bos.write(a, 0, count);
                    }
                    bos.flush();
                    bos.close();
                    zis.close();
                }
                zipfile.close();
            } catch (ZipException e)
            {
                e.printStackTrace();
            } catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    }

    2.使用org.apache.tools.zip工具类,可实现中文文件名称的解压。

    其中 

    1、使用时把ant.jar放到classpath中,程序中使用import org.apache.tools.zip.*;
    2、Apache Ant 下载地址http://ant.apache.org

    3.  Ant ZIP API:  http://www.jajakarta.org/ant/ant-1.6.1/docs/mix/manual/api/org/apache/tools/zip/

    代码基本没变,只是引用的包变为了apache的

    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Enumeration;
    
    import org.apache.tools.zip.ZipEntry;
    import org.apache.tools.zip.ZipFile;
    
    public class Unzip
    {
        private static final int BUFFER = 2048;
    
        public static void main(String[] args)
        {
            String filePath = "C:\test\test.zip";
            String desPath = filePath.substring(0, filePath.lastIndexOf("\"))
                    + "\";
            int count = 0;
            byte[] a = new byte[BUFFER];
            File file = new File(filePath);
            if (!file.exists())
            {
                return;
            }
            try
            {
                ZipFile zipfile = new ZipFile(file);
                Enumeration<? extends ZipEntry> enu = zipfile.getEntries();
                while (enu.hasMoreElements())
                {
                    ZipEntry entry = enu.nextElement();
                    // 如果zip条目为目录,则直接创建
                    if (entry.isDirectory())
                    {
                        new File(desPath + entry.getName()).mkdirs();
                        continue;
                    }
                    File desFile = new File(desPath + entry.getName());
                    if (!desFile.exists())
                    {
                        desFile.createNewFile();
                    }
                    FileOutputStream fos = new FileOutputStream(desFile);
                    BufferedOutputStream bos = new BufferedOutputStream(fos, BUFFER);
                    BufferedInputStream zis = new BufferedInputStream(
                            zipfile.getInputStream(entry));
                    while ((count = zis.read(a, 0, BUFFER)) != -1)
                    {
                        bos.write(a, 0, count);
                    }
                    bos.flush();
                    bos.close();
                    zis.close();
                }
                zipfile.close();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    PyCharm安装及其使用
    web端自动化——Selenium3+python自动化(3.7版本)-chrome67环境搭建
    Unittest单元测试框架
    selenium IDE下载安装(For Chrome and firefox)
    视频上传测试点
    web端自动化——自动化测试准备工作
    selenium3+Python3+sublime text3自动化登录
    Sublime Text3安装及常用插件安装
    web端自动化——selenium3用法详解
    Selenium2+python自动化2.7-火狐44版本环境搭建(转)
  • 原文地址:https://www.cnblogs.com/CanWork/p/3330822.html
Copyright © 2011-2022 走看看