Java生成zip文件工具类
依赖
<!-- 文件压缩zip操作依赖-->
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.9.7</version>
</dependency>
ZIP工具类以及测试
package com.example.demo.files;
import org.springframework.util.StringUtils;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* @describtion 压缩文件工具
* @creator
* @create-time 9:47 2019/11/18
**/
public class ZipUtil {
/**
* 生成zip压缩文件
* @param fileList 要压缩的文件列表
* @param zipName 生成的zip文件名
*/
public static void genZip(List<File> fileList, String zipName) {
if(fileList == null) {
return;
}
if(StringUtils.isEmpty(zipName)) {
zipName = "G:"+File.separator+UUID.randomUUID().toString().substring(0,6)+"test.zip";
}
ZipOutputStream zos = null;
try {
zos = new ZipOutputStream(new FileOutputStream(zipName));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
System.out.println("start......");
for(File file : fileList) {
try {
zos.putNextEntry(new ZipEntry(file.getName()));
System.out.println("文件名....."+file.getName());
int len;
// 定义缓冲区
byte[] buf = new byte[1024];
FileInputStream fis = new FileInputStream(file);
while((len = fis.read(buf)) != -1) {
zos.write(buf,0, len);
}
fis.close();
zos.closeEntry();
} catch (IOException e) {
e.printStackTrace();
}
}
if(zos != null) {
try {
zos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("end....");
}
/**
* 压缩指定路径下的所有文件
* @param path
*/
public static void toZip(String path, String fileName) {
if(StringUtils.isEmpty(path)) {
return;
}
List<File> files = getFiles(path);
genZip(files,fileName);
}
/**
*
* 递归获取path下所有文件
* @param path 指定文件路径
* @return
*/
private static List<File> getFiles(String path) {
List<File> files = new ArrayList<>();
File file = new File(path);
if(file.isDirectory()) {
File[] files1 = file.listFiles();
for(File f : files1) {
if(f.isDirectory()) {
getFiles(f.getPath());
}else {
// 不含zip文件,这里可以对文件类型做限制
if(!f.getName().endsWith("zip")) {
files.add(f);
}
// files.add(f);
}
}
}
return files;
}
public static void main(String[] args) {
List<File> files = new ArrayList<>();
File file = new File("G:"+File.separator+"test");
File[] files1 = file.listFiles();
for(File f : files1) {
if(f.isFile()) {
files.add(f);
}
}
System.out.println(files.size());
genZip(files,"G:"+File.separator+"test"+File.separator+"test.zip");
toZip("G:"+File.separator+"test","");
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术