package com.wujiahao.utils;
import org.springframework.context.annotation.Configuration;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.Deflater;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@Configuration
public class ZipUtil {
/**
*
* @param sourceFolder 指定要压缩的文件夹路径
* @param zipFilePath 指定压缩后的 zip 文件路径
* @throws IOException
*/
public void zipFolder(String sourceFolder, String zipFilePath) throws IOException {
try {
FileOutputStream fos = new FileOutputStream(zipFilePath);
ZipOutputStream zos = new ZipOutputStream(fos);
// 设置压缩级别
zos.setLevel(Deflater.BEST_COMPRESSION);
// 递归压缩文件夹
zipFolder(new File(sourceFolder), sourceFolder, zos);
// 关闭流
zos.close();
fos.close();
System.out.println("压缩完成!");
} catch (IOException e) {
e.printStackTrace();
}
}
private static void zipFolder(File folder, String rootFolder, ZipOutputStream zos) throws IOException {
for (File file : folder.listFiles()) {
if (file.isDirectory()) {
// 递归压缩子文件夹
zipFolder(file, rootFolder, zos);
} else {
// 添加文件到 zip 输出流
addToZip(file, rootFolder, zos);
}
}
}
private static void addToZip(File file, String rootFolder, ZipOutputStream zos) throws IOException {
FileInputStream fis = new FileInputStream(file);
String entryName = file.getPath().substring(rootFolder.length() + 1); // 获取文件相对于根目录的路径
ZipEntry zipEntry = new ZipEntry(entryName);
zos.putNextEntry(zipEntry);
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
zos.closeEntry();
fis.close();
}
}
package com.wujiahao;
import com.wujiahao.utils.ZipUtil;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.io.IOException;
@SpringBootTest(classes = SystemApplication.class)
@RunWith(SpringRunner.class)
public class ZipTest {
@Autowired
private ZipUtil zipUtil;
@Test
public void testZip() throws IOException {
// localFileName输出的本地文件名
String localFileName = "D:\\logs";
String fileName = "D:\\logs.zip";
zipUtil.zipFolder(localFileName,fileName);
}
}