阅读背景:

压缩文件夹下所有文件以及文件夹下面的所有文件 压缩成一个zip包

来源:互联网 
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(); } } package com.gblfy.flowable; import java.io.Buffer



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: