• java按照目录结构压缩文件夹以及文件夹内内容


     1 package com.basis.utils;
     2 
     3 import java.io.BufferedInputStream;
     4 import java.io.BufferedOutputStream;
     5 import java.io.File;
     6 import java.io.FileInputStream;
     7 import java.io.FileOutputStream;
     8 import java.util.zip.ZipEntry;
     9 import java.util.zip.ZipOutputStream;
    10 
    11 public class ZipCompress {
    12     private String zipFileName;      // 目的地Zip文件
    13     private String sourceFileName;   //源文件(带压缩的文件或文件夹)
    14     
    15     public ZipCompress(String zipFileName,String sourceFileName)
    16     {
    17         this.zipFileName=zipFileName;
    18         this.sourceFileName=sourceFileName;
    19     }
    20     
    21     public void zip() throws Exception
    22     {
    23         //File zipFile = new File(zipFileName);
    24         System.out.println("压缩中...");
    25         
    26         //创建zip输出流
    27         ZipOutputStream out = new ZipOutputStream( new FileOutputStream(zipFileName));
    28         
    29         //创建缓冲输出流
    30         BufferedOutputStream bos = new BufferedOutputStream(out);
    31         
    32         File sourceFile = new File(sourceFileName);
    33         
    34         //调用函数
    35         compress(out,bos,sourceFile,sourceFile.getName());
    36         
    37         bos.close();
    38         out.close();
    39         System.out.println("压缩完成");
    40         
    41     }
    42     
    43     public void compress(ZipOutputStream out,BufferedOutputStream bos,File sourceFile,String base) throws Exception
    44     {
    45         //如果路径为目录(文件夹)
    46         if(sourceFile.isDirectory())
    47         {
    48         
    49             //取出文件夹中的文件(或子文件夹)
    50             File[] flist = sourceFile.listFiles();
    51             
    52             if(flist.length==0)//如果文件夹为空,则只需在目的地zip文件中写入一个目录进入点
    53             {
    54                 System.out.println(base+"/");
    55                 out.putNextEntry(  new ZipEntry(base+"/") );
    56             }
    57             else//如果文件夹不为空,则递归调用compress,文件夹中的每一个文件(或文件夹)进行压缩
    58             {
    59                 for(int i=0;i<flist.length;i++)
    60                 {
    61                     compress(out,bos,flist[i],base+"/"+flist[i].getName());
    62                 }
    63             }
    64         }
    65         else//如果不是目录(文件夹),即为文件,则先写入目录进入点,之后将文件写入zip文件中
    66         {
    67             out.putNextEntry( new ZipEntry(base) );
    68             FileInputStream fos = new FileInputStream(sourceFile);
    69             BufferedInputStream bis = new BufferedInputStream(fos);
    70             
    71             int tag;
    72             System.out.println(base);
    73             //将源文件写入到zip文件中
    74             while((tag=bis.read())!=-1)
    75             {
    76                 out.write(tag);
    77             }
    78             bis.close();
    79             fos.close();
    80             
    81         }
    82     }
    83 }
  • 相关阅读:
    桌面图标有蓝底
    创建与删除SQL约束或字段约束
    (转)ASP.NET(C#) 读取EXCEL ——另加解决日期问题
    ASP连接11种数据库的语法
    GridView 合并列、行类
    Office对应ContentType
    (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
    (转)js判断只能输入数字或小数点
    vscode设置字体大小
    springsecurity+jwt实现登录
  • 原文地址:https://www.cnblogs.com/yuztmt/p/8086629.html
Copyright © 2020-2023  润新知