package com.zwc.www.test;
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.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
/**
* 支持zip的压缩,zip的解压
*/
public class OperateZip {
private File sourceFile;
private File destFile;
/**
* 压缩文件
*/
public void zip(){
try {
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(this.destFile));
FileInputStream fis = null;
ZipEntry ze = null;
File[] files = this.sourceFile.listFiles();
int length = 0;
byte[] b = new byte[1024];
for(int i = 0; i < files.length; i ++){
File file = files[i];
fis = new FileInputStream(file);
this.process(file);
ze = new ZipEntry(file.getName());
zos.putNextEntry(ze);
while((length = fis.read(b)) != -1){
zos.write(b, 0, length);
}
}
fis.close();
zos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 解压文件
*/
public void unzip(){
try {
ZipFile sourceZipFile = new ZipFile(this.sourceFile);
InputStream zis = null;
@SuppressWarnings("unchecked")
Enumeration<ZipEntry> e = (Enumeration<ZipEntry>) sourceZipFile.entries();
FileOutputStream fos = null;
ZipEntry ze = null;
int length = 0;
byte[] b = new byte[1024];
while(e.hasMoreElements()){
ze = e.nextElement();
zis = sourceZipFile.getInputStream(ze);
File file = new File(this.destFile,ze.getName());
fos = new FileOutputStream(file);
while((length = zis.read(b)) != -1){
fos.write(b, 0, length);
}
fos.flush();
fos.close();
}
zis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 中间处理过程
*/
public File process(File file){
return file;
}
/**
* 设置压缩文件存放位置和压缩文件名
*/
public void setZipFile(String sourceDir, String zipDir, String zipFileName){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH_mm_ss");
String date = sdf.format(new Date());
zipFileName = "".equals(zipFileName)? date + ".zip" : zipFileName;
if(zipDir.lastIndexOf(File.separator) == zipDir.length() - 1){
this.destFile = new File(zipDir + zipFileName);
}else{
this.destFile = new File(zipDir + File.separator + zipFileName);
}
this.sourceFile = new File(sourceDir);
}
/**
* 设置解压文件存放位置
*/
public void setUnzipDir(String sourceFile ,String unzipDir){
this.sourceFile = new File(sourceFile);
if(unzipDir.lastIndexOf(File.separator) == unzipDir.length() - 1){
this.destFile = new File(unzipDir);
}else{
this.destFile = new File(unzipDir + File.separator);
}
this.destFile = new File(unzipDir);
}
public static void main(String[] args) {
OperateZip oz = new OperateZip();
oz.setZipFile("C:\\key", "C:\\", "");
oz.zip();
/*oz.setUnzipDir("c:\\2010-12-09 16_17_03.zip", "C:\\key_bak");
oz.unzip();*/
}
}
分享到:
相关推荐
`commons-compress-1.1.jar`是Apache Commons Compress库的一个版本,它提供了对多种压缩格式的支持,包括ZIP。这个库简化了在Java中处理压缩文件的过程,提供了丰富的API供开发者使用。 首先,我们来看`FileUtils....
本文将详细介绍一个Java方法,该方法用于解压包含多层目录结构的ZIP文件,并能够支持中文文件名。这种方法利用了Apache Ant库中的`org.apache.tools.zip.ZipFile`类来实现解压功能。在实际应用中,这种方法非常实用...
如果`filePath`是一个目录且不以`os.sep`结尾,那么它会被理解为压缩该目录下的所有子文件和子目录,不包含该目录本身。`os.walk`用于遍历`filePath`下的所有文件和子目录,然后将它们添加到压缩包中。 这个实现...
修改了其中一个bug,他在解有压缩的3级以上的目录的zip文件时,解压之后文件夹目录不对中途会退出,3级以内正常。改进后经测试CAD安装文件解压6级目录正常使用。另外在函数内部增加了多级目录自动创建,可避免主目录...
本篇文章将详细探讨如何使用ZLIB库来处理多级文件目录的压缩与解压,以及涉及到的相关源码知识。 首先,ZLIB库是基于DEFLATE算法实现的,这是一种结合了LZ77(一种字典压缩算法)和哈夫曼编码的高效压缩算法。在C++...
与多级目录压缩不同,单目录压缩会将所有文件,无论其原本位于多少级目录下,都合并到压缩包的一个根目录下。这种方式牺牲了文件的原始组织结构,但简化了压缩包内的文件查找,尤其对于那些不需要保留原始目录结构,...
QFile和QDir类分别用于处理文件和目录,而QZipWriter和QZipReader则专门用于处理ZIP格式的压缩和解压。 1. **压缩目录:** 在Qt中,我们可以利用QZipWriter类来实现目录的压缩。首先,创建一个QBuffer对象,将其...
- 对于每个压缩后的文件,我们需要在ZIP文件中创建一个对应的ZIP目录条目,这可以通过构造` zip_fileinfo `结构体完成,包括文件名、时间戳等信息。 - 使用` zip_open `和` zip_add_new_file `函数将压缩后的数据...
在Android平台上,实现在线下载压缩包并解压到指定目录是一项常见的需求,特别是在移动应用中,用户可能需要从服务器获取数据或更新资源。这个过程涉及网络请求、文件操作以及压缩和解压缩技术。下面我们将详细讲解...
上的资源改进后封装而成,修改了其中一个bug,他在解有压缩的3级以上的目录的zip文件时,解压之后文件夹目录不对中途会退出,3级以内正常。改进后经测试CAD安装文件解压6级目录正常使用。另外在函数内部增加了多级...
这个资源原本是下载自:csdn论坛的yangyou2009 的资源“使用ZLIB库压缩解压...修改了其中一个bug,他在解有压缩的有多目录的zip文件时,解压之后文件夹目录不对。 这里特别感谢yangyou2009,我在其中学习了很多东西。
这个资源原本是下载自:csdn论坛的yangyou2009 的资源“使用ZLIB库压缩解压...修改了其中一个bug,他在解有压缩的有多目录的zip文件时,解压之后文件夹目录不对。 这里特别感谢yangyou2009,我在其中学习了很多东西。
5. **处理文件名和路径**:由于ZIP文件支持包含路径和多级目录,源码需要正确处理这些信息,以便在目标位置还原文件结构。对于中文文件名和路径,源码必须支持Unicode编码,如UTF-8,以避免乱码问题。 6. **写入...
1. **创建解压目标目录**:首先,你需要在磁盘上创建一个目标目录,用于保存解压后的文件和子目录。 2. **打开ZIP文件**:使用`ZipArchive`类,通过文件流或内存流打开ZIP文件。 3. **遍历ZIP条目**:调用`Zip...
- 递归创建多级目录,如果目录不存在则创建。 4. **数据流处理**: - 解压过程涉及到数据流的读写操作。 - 使用`InputStream`和`OutputStream`类进行文件的读写。 - 示例:从`ZipEntry`中获取输入流,将数据...
`alien-8.95.zip` 文件是使用 `zip` 工具压缩的,它可以包含文件和目录,并支持多级目录结构。在Linux中,我们可以用 `unzip` 命令来处理 `zip` 文件: ```bash $ unzip alien-8.95.zip ``` 这条命令会解压缩 `...
`zlib`库是一个广泛使用的开源压缩库,它提供了强大的数据压缩和解压缩功能,但默认情况下并不直接支持对多级文件夹的压缩。针对这一限制,你提到的项目通过自定义方法实现了对多级文件夹的压缩,这在处理包含多个子...
4. **兼容性广泛**:优秀的ZIP修复工具应支持各种版本的ZIP格式,包括加密的ZIP文件和包含多级压缩的ZIP文件。 5. **用户友好界面**:为了便于非专业用户使用,修复工具通常设计有直观的图形用户界面,只需简单几步...
综上所述,"ziparchive_src.zip" 提供了一个跨平台的C++压缩库,它利用了ZLIB库的强大功能,同时增加了对多级目录和加密的支持。无论是为了在Windows还是Linux环境下开发应用程序,或是需要处理大量文件并确保数据...