`

文件解压缩

 
阅读更多

package com.framework.common.util;



import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
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.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Enumeration;
import java.util.zip.ZipException;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
 


public class ZipUtils {
    private static final int BUFF_SIZE = 1024 * 1024; // 1M Byte

    /**
     * 批量压缩文件(夹)
     *
     * @param resFileList 要压缩的文件(夹)列表
     * @param zipFile 生成的压缩文件
     * @throws IOException 当压缩过程出错时抛出
     */
    public static void zipFiles(Collection<File> resFileList, File zipFile) throws IOException {
        ZipOutputStream zipout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(
                zipFile), BUFF_SIZE));
        for (File resFile : resFileList) {

            zipFile(resFile, zipout, "");

        }

        zipout.close();

    }

    /**
     * 批量压缩文件(夹)
     *
     * @param resFileList 要压缩的文件(夹)列表
     * @param zipFile 生成的压缩文件
     * @param comment 压缩文件的注释
     * @throws IOException 当压缩过程出错时抛出
     */
    public static void zipFiles(Collection<File> resFileList, File zipFile, String comment)

            throws IOException {
        ZipOutputStream zipout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(
                zipFile), BUFF_SIZE));

        for (File resFile : resFileList) {
            zipFile(resFile, zipout, "");

        }

        zipout.setComment(comment);
        zipout.close();

    }

    /**
     * 解压缩一个文件
     *
     * @param zipFile 压缩文件
     * @param folderPath 解压缩的目标目录
     * @throws IOException 当解压缩过程出错时抛出
     */
    public static void upZipFile(File zipFile, String folderPath) throws ZipException, IOException {


        ZipFile zf = new ZipFile(zipFile);
        for (Enumeration<?> entries = zf.getEntries(); entries.hasMoreElements();) {
            ZipEntry entry = ((ZipEntry)entries.nextElement());
            
            if(entry.isDirectory()){
                String dirPath = folderPath + File.separator+entry.getName();
                File dir = new File(dirPath);
                if(!dir.exists())
                    dir.mkdirs();
                continue;
            }
           
            InputStream in = zf.getInputStream(entry);
            String str = folderPath + File.separator + entry.getName();
            //str = new String(str.getBytes("8859_1"), "GB2312");

            File desFile = new File(str);

            if (!desFile.exists()) {
                File fileParentDir = desFile.getParentFile();
                if (!fileParentDir.exists()) {
                    fileParentDir.mkdirs();

                }
                desFile.createNewFile();
            }
            OutputStream out = new FileOutputStream(desFile);

            byte buffer[] = new byte[BUFF_SIZE];

            int realLength;

            while ((realLength = in.read(buffer)) > 0) {

                out.write(buffer, 0, realLength);

            }

            in.close();

            out.close();

        }

    }

    /**
     * 解压文件名包含传入文字的文件
     *
     * @param zipFile 压缩文件
     * @param folderPath 目标文件夹
     * @param nameContains 传入的文件匹配名
     * @throws ZipException 压缩格式有误时抛出
     * @throws IOException IO错误时抛出
     */
    public static ArrayList<File> upZipSelectedFile(File zipFile, String folderPath,
            String nameContains) throws ZipException, IOException {
        ArrayList<File> fileList = new ArrayList<File>();
        File desDir = new File(folderPath);
        if (!desDir.exists()) {
            desDir.mkdir();
        }
        ZipFile zf = new ZipFile(zipFile);
        for (Enumeration<?> entries = zf.getEntries(); entries.hasMoreElements();) {
            ZipEntry entry = ((ZipEntry)entries.nextElement());
            if (entry.getName().contains(nameContains)) {
                InputStream in = zf.getInputStream(entry);
                String str = folderPath + File.separator + entry.getName();
                str = new String(str.getBytes("8859_1"), "GB2312");
                // str.getBytes("GB2312"),"8859_1" ���
                // str.getBytes("8859_1"),"GB2312" ����
                File desFile = new File(str);
                if (!desFile.exists()) {
                    File fileParentDir = desFile.getParentFile();
                    if (!fileParentDir.exists()) {
                        fileParentDir.mkdirs();
                    }
                    desFile.createNewFile();
                }
                OutputStream out = new FileOutputStream(desFile);
                byte buffer[] = new byte[BUFF_SIZE];
                int realLength;
                while ((realLength = in.read(buffer)) > 0) {
                    out.write(buffer, 0, realLength);
                }
                in.close();
                out.close();
                fileList.add(desFile);

            }
        }

        return fileList;

    }

    /**
     * 获得压缩文件内文件列表
     *
     * @param zipFile 压缩文件
     * @return 压缩文件内文件名称
     * @throws ZipException 压缩文件格式有误时抛出
     * @throws IOException 当解压缩过程出错时抛出
     */
    public static ArrayList<String> getEntriesNames(File zipFile) throws ZipException, IOException {
        ArrayList<String> entryNames = new ArrayList<String>();
        Enumeration<?> entries = getEntriesEnumeration(zipFile);
        while (entries.hasMoreElements()) {
            ZipEntry entry = ((ZipEntry)entries.nextElement());
            entryNames.add(new String(getEntryName(entry).getBytes("GB2312"), "8859_1"));
        }
        return entryNames;
    }

    /**
        * 获得压缩文件内压缩文件对象以取得其属性
        *
        * @param zipFile 压缩文件
        * @return 返回一个压缩文件列表
        * @throws ZipException 压缩文件格式有误时抛出
        * @throws IOException IO操作有误时抛出
        */
       public static Enumeration<?> getEntriesEnumeration(File zipFile) throws ZipException,
               IOException {
           ZipFile zf = new ZipFile(zipFile);
           return zf.getEntries();
       }
       /**
        * 取得压缩文件对象的注释
        *
        * @param entry 压缩文件对象
        * @return 压缩文件对象的注释
        * @throws UnsupportedEncodingException
        */
       public static String getEntryComment(ZipEntry entry) throws UnsupportedEncodingException {
           return new String(entry.getComment().getBytes("GB2312"), "8859_1");
       }

       /**
        * 取得压缩文件对象的名称
        *
        * @param entry 压缩文件对象
        * @return 压缩文件对象的名称
        * @throws UnsupportedEncodingException
        */
      public static String getEntryName(ZipEntry entry) throws UnsupportedEncodingException {
          return new String(entry.getName().getBytes("GB2312"), "8859_1");

      }


      /**
      * 压缩文件
      *
      * @param resFile 需要压缩的文件(夹)
      * @param zipout 压缩的目的文件
      * @param rootpath 压缩的文件路径
      * @throws FileNotFoundException 找不到文件时抛出
      * @throws IOException 当压缩过程出错时抛出
      */
     private static void zipFile(File resFile, ZipOutputStream zipout, String rootpath)
             throws FileNotFoundException, IOException {
         rootpath = rootpath + (rootpath.trim().length() == 0 ? "" : File.separator)
                 + resFile.getName();
         rootpath = new String(rootpath.getBytes("8859_1"), "GB2312");
         if (resFile.isDirectory()) {
             File[] fileList = resFile.listFiles();
             for (File file : fileList) {
                 zipFile(file, zipout, rootpath);
             }
         } else {
             byte buffer[] = new byte[BUFF_SIZE];
             BufferedInputStream in = new BufferedInputStream(new FileInputStream(resFile),
                     BUFF_SIZE);
             zipout.putNextEntry(new ZipEntry(rootpath));
             int realLength;
             int pos= 0;
             while ((realLength = in.read(buffer)) != -1) {
                 zipout.write(buffer, pos, realLength);
                 //pos+=realLength;
             }
             in.close();
             zipout.flush();

             zipout.closeEntry();

         }
     }

}

分享到:
评论

相关推荐

    NKBIN BIN文件解压缩工具

    NKBIN BIN文件解压缩工具,可以方便的解压缩出BIN的文件。

    文件解压缩实现

    在IT领域,文件解压缩是日常工作中常见的操作。本文将深入探讨如何实现文件的解压缩功能,特别是针对zip文件格式的处理。我们将基于Java编程语言,以`MyZip.java`这个文件作为示例,来详细讲解相关的编程知识。 ...

    ucos移植zlib和zip文件解压缩

    4. 存储解压缩后的文件:根据ZIP文件中的信息,在UCOS系统的文件系统上创建相应的文件,写入解压后的数据。 5. 错误处理:考虑到嵌入式环境的资源限制,需要对可能出现的错误进行妥善处理,比如内存不足、文件系统...

    CAB文件解压缩工具

    【CAB文件解压缩工具】 CAB( Cabinet)文件是一种由Microsoft开发的压缩文件格式,主要用于Windows操作系统中的软件安装包和系统更新。这种格式能够有效地减少文件大小,便于传输和存储。"CAB文件解压缩工具"是...

    java文件解压缩工具箱及案例

    本主题将深入探讨如何使用Java来创建一个文件解压缩工具箱,特别关注支持ZIP和RAR格式,并解决中文乱码问题。首先,我们需要了解两个核心库:`java-unrar-1.7.0-1.jar` 和 `ant-1.8.2.jar`。 `java-unrar-1.7.0-1....

    jpg文件解压缩并显示 jpg解压缩算法

    标题"jpg文件解压缩并显示 jpg解压缩算法"指的是对JPEG(Joint Photographic Experts Group)格式的图像文件进行解压缩,并在屏幕上显示的过程。这个过程涉及到了JPEG的编码标准和解码算法。描述"jpg文件解压缩并...

    C# zip文件解压缩

    这段代码实现了将zip文件解压缩到指定的目标路径,同时仅处理一级目录。需要注意的是,文件名和路径都应使用平台兼容的路径分隔符(Windows上是`\`,Unix/Linux上是`/`),`Path.Combine()`方法可以处理这个问题。 ...

    CAB文件解压缩工具(修正版)

    这个"CAB文件解压缩工具(修正版)"是一个专门针对CAB文件设计的应用,由公司需求驱动,旨在简化和优化CAB文件的解压缩过程,提供更加用户友好的界面和功能。 在IT领域,了解CAB文件及其处理方法是十分重要的。CAB...

    基于zlib的zip文件解压缩.zip

    本文将深入探讨基于Zlib的zip文件解压缩过程,以及如何使用C语言来实现这一功能。 首先,Zlib是由Jean-loup Gailly和Mark Adler开发的无损数据压缩库,它提供了多种压缩算法,如DEFLATE,这是ZIP文件格式中常用的...

    4、知名免费开源文件解压缩软件7-Zip.rar

    7-Zip是一款非常知名的免费开源文件解压缩工具,它的出现为用户提供了强大的压缩和解压缩功能,而且在保障效率的同时,也注重了软件的开放性和可定制性。这款软件不仅适用于个人用户,也在许多企业环境中得到了广泛...

    WINCE4.2 NK.BIN文件解压缩工具

    标题中的“WINCE4.2 NK.BIN文件解压缩工具”指的是用于Windows CE 4.2操作系统的NK.BIN文件的解压缩程序。NK.BIN文件是Windows CE系统的核心镜像文件,它包含了操作系统的基本组件,如内核、驱动程序和服务。在开发...

    Qt下实现文本文件解压缩功能

    总结来说,实现Qt下的文本文件解压缩功能涉及理解LZSS或其他压缩算法的工作原理,编写解码器,以及有效地利用Qt的I/O和文件操作功能。这需要一定的C++编程和Qt框架知识,以及对数据压缩原理的理解。

    lz文件解压缩工具

    "lz文件解压缩工具"是一个专为处理.zl格式文件设计的应用,它的核心组件是clzip.exe,这是一个多线程版本的压缩程序,能够高效地处理.zl压缩文件。 首先,我们要理解.zl文件格式。zl是一种特殊的压缩格式,它可能由...

    winrar安装文件解压缩安装文件

    "winrar安装文件解压缩安装文件"意味着我们将讨论如何下载并安装WinRAR,以及如何利用它来处理那些被压缩的安装文件。WinRAR的安装文件通常以.exe格式提供,例如这里提到的"wrar393sc.exe",这是WinRAR的一个特定...

    iphone文件解压缩zip-gzip

    当我们谈论“iphone文件解压缩zip-gzip”时,我们实际上在讨论两种不同的文件压缩格式及其在iOS设备上的应用。 首先,`zip`是一种广泛使用的文件归档格式,它允许将多个文件和目录打包成一个单一的可压缩文件。Zip...

    新中大备份文件解压缩工具

    新中大备份文件解压缩工具是一款专为处理新中大软件产生的备份数据而设计的应用程序。这个工具的主要功能是帮助用户高效、安全地对备份文件进行解压缩,以便恢复或查看其中的数据。在IT领域,数据备份和恢复是至关...

    c#打包文件解压缩

    c#打包文件解压缩,很实用的,自己在项目中用到。提供给大家进行参考,共同学习。

    C#源码文件解压缩C#源码文件解压缩C#源码文件解压缩C#源码文件解压缩

    C#源码文件解压缩C#源码文件解压缩C#源码文件解压缩C#源码文件解压缩

    文件解压缩,压缩源码c#,net4.0

    3. 解压缩文件:解压缩文件则需要使用ZipFile或SevenZipExtractor类。通过遍历压缩文件中的每个条目,然后读取并写入到目标位置。 ```csharp using ICSharpCode.SharpZipLib.Zip; // 解压缩ZIP文件 using ...

Global site tag (gtag.js) - Google Analytics