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" 是一个专用于处理etc文件的实用程序,适用于版本1.60。在IT行业中,etc(等等)通常代表/etc目录,这是一个在Linux和类Unix操作系统中的核心配置目录,存储系统级别的配置文件。这个压缩包...
PCT打包解包工具PCT打包解包工具PCT打包解包工具PCT打包解包工具PCT打包解包工具PCT打包解包工具PCT打包解包工具PCT打包解包工具PCT打包解包工具PCT打包解包工具PCT打包解包工具PCT打包解包工具PCT打包解包工具PCT...
4. 错误处理和安全:程序应该能处理文件不存在、权限不足等错误,并确保在打包和解包过程中数据的完整性和安全性。 在实际应用中,文件打包和解包程序还有许多其他功能,如密码保护、多卷压缩、自解压文件等。这些...
J2EE常用工具类汇总 J2EE常用工具类—Value Object工具类 ...J2EE常用工具类—文件打包解包处理类 J2EE常用工具类——文件操作类 J2EE常用工具类——邮件处理类(javaMail发送邮件) J2EE常用工具类——字符串工具类
总的来说,RDB打包解包工具是Redis数据管理的重要辅助工具,它帮助用户安全、高效地处理RDB文件,保障数据的备份和恢复流程顺利进行。对于任何涉及大量Redis数据的项目,理解和掌握这类工具的使用至关重要。
而“解包工具”则进一步明确了rdb的核心作用,即处理打包文件,恢复原始数据。 **应用场景** 1. **数据备份**:rdb可以用来创建整个目录或项目的备份,方便在系统故障或数据丢失时恢复。 2. **软件分发**:开发者...
对于“img文件解包”,常用工具有fastboot、dd、img2simg等。其中,fastboot工具是Android系统的一部分,它可以用于解包和打包img文件,但通常用于与设备通信,执行固件更新。dd命令是一个强大的数据复制工具,可以...
在IT行业中,打包和解包工具是开发人员和游戏爱好者常用的一种软件,主要用于处理游戏资源、应用程序或数据文件。"绝版etc解包打包工具"显然是一款专为此目的设计的工具,尤其适用于处理PAK格式的文件。PAK是一种...
《彩虹岛SPF打包解包源码》是一个专注于处理彩虹岛游戏中的SPF文件的工具。SPF全称为"Server Package File",是游戏开发者为了方便数据管理与传输,将游戏资源进行压缩打包的一种文件格式。这个源码库提供了解包和...
Rdb打包解包工具支持QQ2009及以上版本的解包和重新创建、支持QQ影音皮肤文件的解包和支持结构化文档的解包和打包操作等。Rdb打包解包工具可以自动检测文件格式,用户只需拖动任何文件到文本框中,程序会自动检测文件...
通用文件打包解包助手是一款专为此目的设计的实用工具,它可以帮助用户轻松地处理RDB文件的打包与解包任务。本文将深入探讨该软件的工作原理、功能特点以及其在实际应用中的重要性。 一、通用文件打包解包助手简介 ...
"apk打包解包工具"是一类用于处理APK文件的实用程序,它们可以帮助开发者进行APK的构建、拆解、修改和重新签名等操作。下面将详细阐述相关知识点: 1. **APK打包**:APK打包过程是将Android应用的所有资源(如Java...
安卓机型一键解包打包工具 做rom的工具 解包 打包系统 解包rec 解包boot 打包rec 打包boot 解包系统 解包其他分区img等 对应到解包打包选项较多 资源自测较好 建议win7以上机型使用 资源较大。建议留有空间解压
rk29打包解包工具ultra2.2\RK2918解包打包教程.doc VCDS ESCWRE
标题中的"rez打包解包.zip"表明这是一个与rez工具相关的压缩包,用于处理游戏资源,特别是针对《穿越火线》(CrossFire, 简称CF)的图标修改。rez工具是游戏模组制作中常用的一种工具,它可以用来打包和解包游戏资源,...
- 使用打包工具或脚本,指定输入目录(即包含待打包文件的目录)和输出pak文件的路径。 - 工具会遍历输入目录,创建文件索引,并将所有文件压缩进新的pak文件。 - 这个过程可能需要设置一些参数,比如压缩级别,...
打包文件可以是自包含的,这意味着它们包含了运行所需的所有依赖,确保在目标环境中无需额外安装就能使用。 在Windows操作系统中,常见的打包工具有WinRAR、7-Zip等,它们支持多种压缩格式,如ZIP、RAR、7Z等。这些...
APK打包解包工具,这个是手机版本,完全可以完美打包以安装apk
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...