zip压缩工具类
java将有关zip压缩的内容都封装在java.util.zip宝中,用java实现zip压缩,不用考虑压缩算法,java已经将这些进行了封装
实际上用java实现zip压缩涉及的就是一个“输入输出流”的概念
用java实现一个文件的zip压缩,过程可以简单地表示为:
当然具体实现要比这个复杂一点,比如要先像zip文件中写入目录进入点。。如果要压缩文件夹中的内容要遍历文件夹中的文件和子文件夹。
/**
* @author: hxp
* @date: 2019/3/30 18:09
* @description:zip压缩工具
*/
public class ZipCompress {
/**
* 目的地Zip文件
*/
private String zipFileName;
/**
* 源文件(待压缩的文件或文件夹)
*/
private String sourceFileName;
public ZipCompress(String zipFileName,String sourceFileName)
{
this.zipFileName=zipFileName;
this.sourceFileName=sourceFileName;
}
public void zip() throws Exception
{
System.out.println("压缩中...");
File file = new File(zipFileName);
if(!file.exists()){
File fileParent = file.getParentFile();
if(!fileParent.exists()){
fileParent.mkdirs();
}
}
//创建zip输出流
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
//创建缓冲输出流
BufferedOutputStream bos = new BufferedOutputStream(out);
File sourceFile = new File(sourceFileName);
//调用函数
compress(out,bos,sourceFile,sourceFile.getName());
bos.close();
out.close();
System.out.println("压缩完成");
}
public void compress(ZipOutputStream out,BufferedOutputStream bos,File sourceFile,String base) throws Exception
{
//如果路径为目录(文件夹)
if(sourceFile.isDirectory())
{
//取出文件夹中的文件(或子文件夹)
File[] list = sourceFile.listFiles();
//如果文件夹为空,则只需在目的地zip文件中写入一个目录进入点
if(list.length==0)
{
System.out.println(base+"/");
out.putNextEntry( new ZipEntry(base+"/") );
}
else//如果文件夹不为空,则递归调用compress,文件夹中的每一个文件(或文件夹)进行压缩
{
for(int i=0;i<list.length;i++)
{
compress(out,bos,list[i],base+"/"+list[i].getName());
}
}
}
else//如果不是目录(文件夹),即为文件,则先写入目录进入点,之后将文件写入zip文件中
{
out.putNextEntry( new ZipEntry(base) );
FileInputStream fos = new FileInputStream(sourceFile);
BufferedInputStream bis = new BufferedInputStream(fos);
int tag;
System.out.println(base);
//将源文件写入到zip文件中
while((tag=bis.read())!=-1)
{
bos.write(tag);
}
bis.close();
fos.close();
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理