1、将多个文件夹压缩成一个压缩包(压缩到固定目录)
import java.io.*;
import java.util.list;
import java.util.zip.zipentry;
import java.util.zip.zipoutputstream;
public class filezipper {
public static void main(string[] args) {
// 示例使用
string zipfilepath = "c:\\users\\guohu\\desktop\\archive.zip";
list<file> filelist = list.of(
new file("c:\\users\\guohu\\desktop\\新建文件夹 (8)\\1657269583419039746"),
new file("c:\\users\\guohu\\desktop\\新建文件夹 (8)\\1657269583419039747"),
new file("c:\\users\\guohu\\desktop\\新建文件夹 (8)\\1657269583419039748")
);
// 将文件列表压缩成压缩包
boolean result = zipfiles(filelist, zipfilepath);
if (result) {
system.out.println("文件压缩成功: " + zipfilepath);
} else {
system.out.println("压缩文件失败");
}
}
public static boolean zipfiles(list<file> filelist, string zipfilepath) {
try (zipoutputstream zos = new zipoutputstream(new fileoutputstream(zipfilepath))) {
for (file file : filelist) {
if (file.exists()) {
compress(file, zos, file.getname(), true);
}
}
return true;
} catch (ioexception e) {
e.printstacktrace();
return false;
}
}
private static void compress(file sourcefile, zipoutputstream zos, string name, boolean keepdirstructure)
throws ioexception {
byte[] buffer = new byte[4096];
if (sourcefile.isfile()) {
try (fileinputstream fis = new fileinputstream(sourcefile)) {
zipentry zipentry;
if (keepdirstructure) {
zipentry = new zipentry(name);
} else {
zipentry = new zipentry(sourcefile.getname());
}
zos.putnextentry(zipentry);
int length;
while ((length = fis.read(buffer)) > 0) {
zos.write(buffer, 0, length);
}
zos.closeentry();
}
} else if (sourcefile.isdirectory()) {
file[] files = sourcefile.listfiles();
if (files != null) {
for (file file : files) {
if (keepdirstructure) {
compress(file, zos, name + file.separator + file.getname(), keepdirstructure);
} else {
compress(file, zos, file.getname(), keepdirstructure);
}
}
}
}
}
}
2、将多个文件夹压缩成一个压缩包(通过浏览器下载)
list<file> filelist = arrays.aslist(
new file("c:\\users\\guohu\\desktop\\新建文件夹 (8)\\1657269583419039746"),
new file("c:\\users\\guohu\\desktop\\新建文件夹 (8)\\1657269583419039747"),
new file("c:\\users\\guohu\\desktop\\新建文件夹 (8)\\1657269583419039748")
);
zipfiles(filelist, response,"学生资料");
/**
* 多个文件压缩成压缩包并下载工具类
*
* @param filelist
* @param
*/
public static void zipfiles(list<file> filelist, httpservletresponse response, string zipfilename) {
try {
// 设置响应的头部信息
response.setheader("access-control-expose-headers", "content-disposition");
response.setheader("content-disposition", "attachment;filename=" + urlencoder.encode(zipfilename+".zip", "utf-8"));
// 设置响应内容的类型
response.setcontenttype("application/octet-stream");
// 将压缩文件写入输出流
try (zipoutputstream zos = new zipoutputstream(response.getoutputstream())) {
for (file file : filelist) {
if (file.exists()) {
compress(file, zos, file.getname(), true);
}
}
}
response.flushbuffer();
response.getoutputstream().close();
} catch (ioexception e) {
e.printstacktrace();
}
}
private static void compress(file sourcefile, zipoutputstream zos, string name, boolean keepdirstructure)
throws ioexception {
byte[] buffer = new byte[4096];
if (sourcefile.isfile()) {
try (fileinputstream fis = new fileinputstream(sourcefile)) {
zipentry zipentry;
if (keepdirstructure) {
zipentry = new zipentry(name);
} else {
zipentry = new zipentry(sourcefile.getname());
}
zos.putnextentry(zipentry);
int length;
while ((length = fis.read(buffer)) > 0) {
zos.write(buffer, 0, length);
}
zos.closeentry();
}
} else if (sourcefile.isdirectory()) {
file[] files = sourcefile.listfiles();
if (files != null) {
for (file file : files) {
if (keepdirstructure) {
compress(file, zos, name + file.separator + file.getname(), keepdirstructure);
} else {
compress(file, zos, file.getname(), keepdirstructure);
}
}
}
}
}
以上就是springboot将多个文件夹进行压缩的两种方法(浏览器下载和另存为)的详细内容,更多关于springboot文件夹压缩的资料请关注代码网其它相关文章!
发表评论