package com.gblfy.flowable;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* 文件压缩工具类
*
* @author gblfy
* date 2023-07-25
*/
public class FileUtils {
/**
* 需求声明:
* 1.文件压缩说明
* 压缩前->文件目录列表
* 文件存放路径:D:\oa
* HY000120130301
* --HY000120130301 文件夹
* --1996-D-业-0019.pdf 文件
* --文件元数据.xml 文件
* --说明文件.xml 文件
* --文件目录.xml 文件
*
* 压缩后->文件目录列表
* 文件存放路径:D:\oa
* HY000120130301
* --1996-D-业-0019.pdf 文件
* --文件元数据.xml 文件
* --说明文件.xml 文件
* --文件目录.xml 文件
*
* 2.压缩包名称:HY000120130301归档文件.zip
* 3.压缩完成后需要删除原文件夹
*/
public static void main(String[] args) {
FileUtils.compressToZip("D:\\oa\\HY000120130301", "D:\\oa\\", "HY000120130301" + "归档文件" + ".zip");
System.out.println("---------success----------");
}
/**
* 压缩文件
*
* @param sourceFilePath 源文件路径(需要要锁的文件夹路径)栗子:D:\oa\HY000120130301
* @param zipFilePath 压缩后文件存储路径 栗子:D:\oa\HY000120130301
* @param zipFilename 压缩后文件名 栗子:HY000120130301归档文件.zip
*/
public static void compressToZip(String sourceFilePath, String zipFilePath, String zipFilename) {
File sourceFile = new File(sourceFilePath);
File zipPath = new File(zipFilePath);
if (!zipPath.exists()) {
zipPath.mkdirs();
}
File zipFile = new File(zipPath + File.separator + zipFilename);
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))) {
writeZip(sourceFile, "", zos);
//文件压缩完成后,删除被压缩文件
boolean flag = deleteDir(sourceFile);
// log.info("删除被压缩文件[" + sourceFile + "]标志:{}", flag);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage(), e.getCause());
}
}
/**
* 遍历所有文件,压缩
*
* @param file 源文件目录
* @param parentPath 压缩文件目录
* @param zos 文件流
*/
public static void writeZip(File file, String parentPath, ZipOutputStream zos) {
if (file.isDirectory()) {
//目录
parentPath += file.getName() + File.separator;
File[] files = file.listFiles();
for (File f : files) {
writeZip(f, parentPath, zos);
}
} else {
//文件
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) {
//指定zip文件夹
// ZipEntry zipEntry = new ZipEntry(parentPath + file.getName());
//生成的zip不包含该文件夹
ZipEntry zipEntry = new ZipEntry(file.getName());
zos.putNextEntry(zipEntry);
int len;
byte[] buffer = new byte[1024 * 10];
while ((len = bis.read(buffer, 0, buffer.length)) != -1) {
zos.write(buffer, 0, len);
zos.flush();
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage(), e.getCause());
}
}
}
/**
* 删除文件夹
*
* @param dir
* @return
*/
public static boolean deleteDir(File dir) {
if (dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
//删除空文件夹
return dir.delete();
}
}
压缩文件夹下所有文件以及文件夹下面的所有文件 压缩成一个zip包
猜你喜欢
转载自blog.csdn.net/weixin_40816738/article/details/131857190
今日推荐
周排行