前言:在Java开发中,有时候我们需要将一些文件或文件夹打包成zip压缩包,以便运输或存储。而有时候,我们还需要在压缩包内创建文件夹来存放不用的文件类型,本文将提供给用户打包压缩包同时提供,创建一层文件夹的方法; 话不多说 上干货;
/**
* @author: xy
* @date: 2024/06/07
* @des: 压缩目标文件时多创一层文件夹
*/
@Slf4j
public class ZipFiles {
/**
*
* @param files 文件夹列表
* @param zipFileName 输出ZIP文件的路径
* @param folderInZip 在ZIP文件中创建的文件夹名称
* @throws IOException
*/
public static void zipFiles(File[] files, String zipFileName, String folderInZip) throws IOException {
try (
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(zipFileName));
ZipOutputStream zos = new ZipOutputStream(bos)
) {
for (File file : files) {
// 创建ZIP中的新目录(如果需要)
String filePathInZip = folderInZip + "/" + file.getName();
ZipEntry zipEntry = new ZipEntry(filePathInZip);
zos.putNextEntry(zipEntry);
// 读取文件内容并写入ZIP文件
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = bis.read(buffer)) != -1) {
zos.write(buffer, 0, bytesRead);
}
}
}
}
}
public static void zipFiles2(List<VideoFileDTO> videoNames, String zipFileName, String folderInZip) throws IOException {
try (
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(zipFileName));
ZipOutputStream zos = new ZipOutputStream(bos)
) {
for (VideoFileDTO videoName : videoNames) {
// 创建ZIP中的新目录(如果需要)
String filePathInZip = folderInZip + "/" + videoName.getName();
ZipEntry zipEntry = new ZipEntry(filePathInZip);
zos.putNextEntry(zipEntry);
// 读取文件内容并写入ZIP文件
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(videoName.getFile()))) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = bis.read(buffer)) != -1) {
zos.write(buffer, 0, bytesRead);
}
}
}
}
}
/**
*
* @param videoNames 目标文件地址和需要生成的文件名
* @param zipFileName 压缩包生成地址
* @param folderInZip 需要添加的压缩文件夹名
* @throws IOException
*/
public static void zipFiles3(List<VideoNameDTO> videoNames, String zipFileName, String folderInZip) throws IOException {
log.info("------------------ start compressed video");
try (
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(zipFileName));
ZipOutputStream zos = new ZipOutputStream(bos)
) {
for (VideoNameDTO videoName : videoNames) {
// 创建ZIP中的新目录(如果需要)
String filePathInZip = folderInZip + "/" + videoName.getName();
ZipEntry zipEntry = new ZipEntry(filePathInZip);
zos.putNextEntry(zipEntry);
// 读取文件内容并写入ZIP文件
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File(videoName.getVideoUrl())))) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = bis.read(buffer)) != -1) {
zos.write(buffer, 0, bytesRead);
}
}
}
}
log.info("------------------ compressed video end");
}
/* public static void main(String[] args) throws IOException {
// 待压缩的文件列表
*//* File[] files = {new File("D:/fastdfsfile/test1.mp4"), new File("D:/fastdfsfile/test2.mp4")};
// 输出ZIP文件的路径
String zipFileName = "D:/fastdfsfile/archive.zip";
// 在ZIP文件中创建的文件夹名称
String folderInZip = "myfolder";
zipFiles(files, zipFileName, folderInZip);*//*
List<VideoNameDTO> videoNames = new ArrayList<>();
for (int i = 0; i < 6; i++) {
VideoNameDTO videoNameDTO = new VideoNameDTO();
videoNameDTO.setName("test"+(i+1)+".mp4");
// videoNameDTO.setFile(new File("D:/fastdfsfile/test"+(i+1)+".mp4"));
videoNameDTO.setVideoUrl("D:/fastdfsfile/test"+(i+1)+".mp4");
videoNames.add(videoNameDTO);
}
String zipFileName = "D:/fastdfsfile/测试22.zip";
// 在ZIP文件中创建的文件夹名称
String folderInZip = "mmqqq";
zipFiles3(videoNames, zipFileName, folderInZip);
}*/
}
如果有帮助,请点个赞吧!!!