文件、文件夹的压缩、解压

public class ZipFileUtils {
	/**
	   * 压缩文件和文件夹
	   *
	   * @param srcFileString 要压缩的文件或文件夹
	   * @param zipFileString 压缩完成的Zip路径
	   * @throws Exception
	   */
	  public static void ZipFolder(String srcFileString, String zipFileString) throws Exception {
	    //创建ZIP
	    ZipOutputStream outZip = new ZipOutputStream(new FileOutputStream(zipFileString));
	    //创建文件
	    File file = new File(srcFileString);
	    //压缩
	    ZipFiles(file.getParent()+ File.separator, file.getName(), outZip);
	    //完成和关闭
	    outZip.finish();
	    outZip.close();
	  }
	  
	  /**
	   * 压缩文件
	   *
	   * @param folderString
	   * @param fileString
	   * @param zipOutputSteam
	   * @throws Exception
	   */
	  private static void ZipFiles(String folderString, String fileString, ZipOutputStream zipOutputSteam) throws Exception {
	    if (zipOutputSteam == null)
	      return;
	    File file = new File(folderString + fileString);
	    if (file.isFile()) {
	      ZipEntry zipEntry = new ZipEntry(fileString);
	      FileInputStream inputStream = new FileInputStream(file);
	      zipOutputSteam.putNextEntry(zipEntry);
	      int len;
	      byte[] buffer = new byte[4096];
	      while ((len = inputStream.read(buffer)) != -1) {
	        zipOutputSteam.write(buffer, 0, len);
	      }
	      zipOutputSteam.closeEntry();
	    } else {
	      //文件夹
	      String fileList[] = file.list();
	      //没有子文件和压缩
	      if (fileList.length <= 0) {
	        ZipEntry zipEntry = new ZipEntry(fileString + File.separator);
	        zipOutputSteam.putNextEntry(zipEntry);
	        zipOutputSteam.closeEntry();
	      }
	      //子文件和递归
	      for (int i = 0; i < fileList.length; i++) {
	        ZipFiles(folderString+fileString+"/", fileList[i], zipOutputSteam);
	      }
	    }
	}
	  
	  /**
	     * 解压zip到指定的路径
	     * @param zipFileString  ZIP的名称
	     * @param outPathString   要解压缩路径
	     * @throws Exception
	     */
	    public static void UnZipFolder(String zipFileString, String outPathString) throws Exception {
	        ZipInputStream inZip = new ZipInputStream(new FileInputStream(zipFileString));
	        ZipEntry zipEntry;
	        String  szName = "";
	        while ((zipEntry = inZip.getNextEntry()) != null) {
	            szName = zipEntry.getName();
	            if (zipEntry.isDirectory()) {
	                //获取部件的文件夹名
	                szName = szName.substring(0, szName.length() - 1);
	                File folder = new File(outPathString + File.separator + szName);
	                folder.mkdirs();
	            } else {
	                File file = new File(outPathString + File.separator + szName);
	                if (!file.exists()){
	                    file.getParentFile().mkdirs();
	                    file.createNewFile();
	                }
	                // 获取文件的输出流
	                FileOutputStream out = new FileOutputStream(file);
	                int len;
	                byte[] buffer = new byte[1024];
	                // 读取(字节)字节到缓冲区
	                while ((len = inZip.read(buffer)) != -1) {
	                    // 从缓冲区(0)位置写入(字节)字节
	                    out.write(buffer, 0, len);
	                    out.flush();
	                }
	                out.close();
	            }
	        }
	        inZip.close();
	    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值