`

J2EE常用工具类—文件打包解包处理类

阅读更多
package cn.org.jshuwei.j2ee.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;

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

/**
* 文件压缩解压工具类
* 
* @author huwei(jshuwei.org.cn)
* @since 1.2
* 
*/
public class ZipUtil {
    /**
     * 压缩ZIP文件,将baseDirName目录下的所有文件压缩到targetFileName.ZIP文件中
     * 
     * @param baseDirName
     *            需要压缩的文件的跟目录
     * @param targetFileName
     *            压缩有生成的文件名
     */
    public static void zipFile(String baseDirName, String targetFileName) {
        if (baseDirName == null) {
            return;
        }
        File file = new File(baseDirName);
        if (!file.exists()) {
            return;
        }
        String baseDirPath = file.getAbsolutePath();
        File targetFile = new File(targetFileName);
        try {
            ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
                    targetFile));
            if (file.isFile()) {
                fileToZip(baseDirPath, file, out);
            } else {
                dirToZip(baseDirPath, file, out);
            }
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 解压缩ZIP文件,将ZIP文件里的内容解压到targetBaseDirName目录下
     * 
     * @param zipFileName
     *            待解压缩的ZIP文件名
     * @param targetBaseDirName
     *            目标目录
     */
    @SuppressWarnings("unchecked")
    public static void unzipFile(String zipFileName, String targetBaseDirName) {
        if (!targetBaseDirName.endsWith(File.separator)) {
            targetBaseDirName += File.separator;
        }
        try {
            ZipFile zipFile = new ZipFile(zipFileName);
            ZipEntry entry = null;
            String entryName = null;
            String targetFileName = null;
            byte[] buffer = new byte[4096];
            int bytes_read;
            Enumeration entrys = zipFile.getEntries();//.entries();
            while (entrys.hasMoreElements()) {
                entry = (ZipEntry) entrys.nextElement();
                entryName = entry.getName();
                targetFileName = targetBaseDirName + entryName;
                if (entry.isDirectory()) {
                    new File(targetFileName).mkdirs();
                    continue;
                } else {
                    new File(targetFileName).getParentFile().mkdirs();
                }
                File targetFile = new File(targetFileName);
                FileOutputStream os = new FileOutputStream(targetFile);
                InputStream is = zipFile.getInputStream(entry);
                while ((bytes_read = is.read(buffer)) != -1) {
                    os.write(buffer, 0, bytes_read);
                }
                os.close();
                is.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void dirToZip(String baseDirPath, File dir,
            ZipOutputStream out) {
        if (dir.isDirectory()) {
            File[] files = dir.listFiles();
            if (files.length == 0) {
                ZipEntry entry = new ZipEntry(getEntryName(baseDirPath, dir));
                try {
                    out.putNextEntry(entry);
                    out.closeEntry();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return;
            }
            for (int i = 0; i < files.length; i++) {
                if (files[i].isFile()) {
                    fileToZip(baseDirPath, files[i], out);
                } else {
                    dirToZip(baseDirPath, files[i], out);
                }
            }
        }
    }

    private static void fileToZip(String baseDirPath, File file,
            ZipOutputStream out) {
        FileInputStream in = null;
        ZipEntry entry = null;
        byte[] buffer = new byte[4096];
        int bytes_read;
        if (file.isFile()) {
            try {
                in = new FileInputStream(file);
                entry = new ZipEntry(getEntryName(baseDirPath, file));
                out.putNextEntry(entry);
                while ((bytes_read = in.read(buffer)) != -1) {
                    out.write(buffer, 0, bytes_read);
                }
                out.closeEntry();
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private static String getEntryName(String baseDirPath, File file) {
        if (!baseDirPath.endsWith(File.separator)) {
            baseDirPath += File.separator;
        }
        String filePath = file.getAbsolutePath();
        if (file.isDirectory()) {
            filePath += "/";
        }
        int index = filePath.indexOf(baseDirPath);
        return filePath.substring(index + baseDirPath.length());
    }
}

 

分享到:
评论

相关推荐

    WDetc打包解包工具.zip

    "WDetc打包解包工具.zip" 是一个专用于处理etc文件的实用程序,适用于版本1.60。在IT行业中,etc(等等)通常代表/etc目录,这是一个在Linux和类Unix操作系统中的核心配置目录,存储系统级别的配置文件。这个压缩包...

    PCT打包解包工具.exe

    PCT打包解包工具PCT打包解包工具PCT打包解包工具PCT打包解包工具PCT打包解包工具PCT打包解包工具PCT打包解包工具PCT打包解包工具PCT打包解包工具PCT打包解包工具PCT打包解包工具PCT打包解包工具PCT打包解包工具PCT...

    简易文件打包&解包程序

    4. 错误处理和安全:程序应该能处理文件不存在、权限不足等错误,并确保在打包和解包过程中数据的完整性和安全性。 在实际应用中,文件打包和解包程序还有许多其他功能,如密码保护、多卷压缩、自解压文件等。这些...

    java常用工具类打包下载

    J2EE常用工具类汇总 J2EE常用工具类—Value Object工具类 ...J2EE常用工具类—文件打包解包处理类 J2EE常用工具类——文件操作类 J2EE常用工具类——邮件处理类(javaMail发送邮件) J2EE常用工具类——字符串工具类

    RDB格式文件打包解包工具

    总的来说,RDB打包解包工具是Redis数据管理的重要辅助工具,它帮助用户安全、高效地处理RDB文件,保障数据的备份和恢复流程顺利进行。对于任何涉及大量Redis数据的项目,理解和掌握这类工具的使用至关重要。

    通用文件打包解包工具 rdb等打包解包工具

    而“解包工具”则进一步明确了rdb的核心作用,即处理打包文件,恢复原始数据。 **应用场景** 1. **数据备份**:rdb可以用来创建整个目录或项目的备份,方便在系统故障或数据丢失时恢复。 2. **软件分发**:开发者...

    img文件解包和打包工具

    对于“img文件解包”,常用工具有fastboot、dd、img2simg等。其中,fastboot工具是Android系统的一部分,它可以用于解包和打包img文件,但通常用于与设备通信,执行固件更新。dd命令是一个强大的数据复制工具,可以...

    绝版etc解包打包工具

    在IT行业中,打包和解包工具是开发人员和游戏爱好者常用的一种软件,主要用于处理游戏资源、应用程序或数据文件。"绝版etc解包打包工具"显然是一款专为此目的设计的工具,尤其适用于处理PAK格式的文件。PAK是一种...

    彩虹岛SPF打包解包源码

    《彩虹岛SPF打包解包源码》是一个专注于处理彩虹岛游戏中的SPF文件的工具。SPF全称为"Server Package File",是游戏开发者为了方便数据管理与传输,将游戏资源进行压缩打包的一种文件格式。这个源码库提供了解包和...

    Rdb打包解包工具4.0精简版 .zip

    Rdb打包解包工具支持QQ2009及以上版本的解包和重新创建、支持QQ影音皮肤文件的解包和支持结构化文档的解包和打包操作等。Rdb打包解包工具可以自动检测文件格式,用户只需拖动任何文件到文本框中,程序会自动检测文件...

    通用文件打包解包助手.exe

    通用文件打包解包助手是一款专为此目的设计的实用工具,它可以帮助用户轻松地处理RDB文件的打包与解包任务。本文将深入探讨该软件的工作原理、功能特点以及其在实际应用中的重要性。 一、通用文件打包解包助手简介 ...

    apk打包解包工具

    "apk打包解包工具"是一类用于处理APK文件的实用程序,它们可以帮助开发者进行APK的构建、拆解、修改和重新签名等操作。下面将详细阐述相关知识点: 1. **APK打包**:APK打包过程是将Android应用的所有资源(如Java...

    安卓机型一键解包打包工具 做rom的工具

    安卓机型一键解包打包工具 做rom的工具 解包 打包系统 解包rec 解包boot 打包rec 打包boot 解包系统 解包其他分区img等 对应到解包打包选项较多 资源自测较好 建议win7以上机型使用 资源较大。建议留有空间解压

    rk29打包解包工具ultra2.2\RK2918解包打包教程.doc

    rk29打包解包工具ultra2.2\RK2918解包打包教程.doc VCDS ESCWRE

    rez打包解包.zip

    标题中的"rez打包解包.zip"表明这是一个与rez工具相关的压缩包,用于处理游戏资源,特别是针对《穿越火线》(CrossFire, 简称CF)的图标修改。rez工具是游戏模组制作中常用的一种工具,它可以用来打包和解包游戏资源,...

    pak文件的解包和打包

    - 使用打包工具或脚本,指定输入目录(即包含待打包文件的目录)和输出pak文件的路径。 - 工具会遍历输入目录,创建文件索引,并将所有文件压缩进新的pak文件。 - 这个过程可能需要设置一些参数,比如压缩级别,...

    通用文件打包解包操作

    打包文件可以是自包含的,这意味着它们包含了运行所需的所有依赖,确保在目标环境中无需额外安装就能使用。 在Windows操作系统中,常见的打包工具有WinRAR、7-Zip等,它们支持多种压缩格式,如ZIP、RAR、7Z等。这些...

    APK打包解包工具

    APK打包解包工具,这个是手机版本,完全可以完美打包以安装apk

    sis文件打包解包工具.rar

    sis文件打包解包工具是专为Symbian操作系统设计的软件打包和解包工具,它主要服务于SIS和SISX格式的应用程序。SIS和SISX是诺基亚等智能手机在Symbian系统上安装应用的标准格式,类似于Android的APK或iOS的IPA文件。 ...

    RDB打包解包工具RDB打包解包工具

    RDB打包解包工具RDB打包解包工具RDB打包解包工具RDB打包解包工具RDB打包解包工具RDB打包解包工具RDB打包解包工具RDB打包解包工具RDB打包解包工具RDB打包解包工具RDB打包解包工具RDB打包解包工具RDB打包解包工具RDB...

Global site tag (gtag.js) - Google Analytics