博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
压缩工具类 - ZipUtils.java
阅读量:4615 次
发布时间:2019-06-09

本文共 5798 字,大约阅读时间需要 19 分钟。

压缩工具类,提供压缩文件、解压文件的方法。

 

源码如下:(点击下载 -  、)

import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.Enumeration;import org.apache.commons.io.FilenameUtils;import org.apache.commons.io.IOUtils;import org.apache.commons.lang.ArrayUtils;import org.apache.commons.lang.StringUtils;import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipFile;import org.apache.tools.zip.ZipOutputStream;/** * 压缩工具类 *  */public class ZipUtils {    private static final String DEFAULT_CHARSET = "UTF-8";    /**     * 压缩文件夹     *     * @param zipFileName     *            打包后文件的名称,含路径     * @param sourceFolder     *            需要打包的文件夹或者文件的路径     * @param zipPathName     *            打包目的文件夹名,为空则表示直接打包到根     */    public static void zip(String zipFileName, String sourceFolder, String zipPathName) throws Exception {        ZipOutputStream out = null;        try {            File zipFile = new File(zipFileName);            FolderUtils.mkdirs(zipFile.getParent());            out = new ZipOutputStream(zipFile);            out.setEncoding(DEFAULT_CHARSET);            if (StringUtils.isNotBlank(zipPathName)) {                zipPathName = FilenameUtils.normalizeNoEndSeparator(zipPathName, true) + "/";            } else {                zipPathName = "";            }            zip(out, sourceFolder, zipPathName);        } catch (IOException e) {            e.printStackTrace();            throw new Exception(e);        } finally {            IOUtils.closeQuietly(out);        }    }    /**     * 压缩文件夹     *     * @param zipFile     *            a {
@link java.lang.String} object. * @param source * a {
@link java.lang.String} object. */ public static void zip(String zipFile, String source) throws Exception { File file = new File(source); zip(zipFile, source, file.isFile() ? StringUtils.EMPTY : file.getName()); } /** * 压缩文件夹 * * @param zipFile * a {
@link java.io.File} object. * @param source * a {
@link java.io.File} object. */ public static void zip(File zipFile, File source) throws Exception { zip(zipFile.getAbsolutePath(), source.getAbsolutePath()); } private static void zip(ZipOutputStream zos, String file, String pathName) throws IOException { File file2zip = new File(file); if (file2zip.isFile()) { zos.putNextEntry(new ZipEntry(pathName + file2zip.getName())); IOUtils.copy(new FileInputStream(file2zip.getAbsolutePath()), zos); zos.flush(); zos.closeEntry(); } else { File[] files = file2zip.listFiles(); if (ArrayUtils.isNotEmpty(files)) { for (File f : files) { if (f.isDirectory()) { zip(zos, FilenameUtils.normalizeNoEndSeparator(f.getAbsolutePath(), true), FilenameUtils.normalizeNoEndSeparator(pathName + f.getName(), true) + "/"); } else { zos.putNextEntry(new ZipEntry(pathName + f.getName())); IOUtils.copy(new FileInputStream(f.getAbsolutePath()), zos); zos.flush(); zos.closeEntry(); } } } } } /** * 解压 * * @param fromZipFile * zip文件路径 * @param unzipPath * 解压路径 */ @SuppressWarnings("unchecked") public static final void unzip(String fromZipFile, String unzipPath) throws Exception { FileOutputStream fos = null; InputStream is = null; String path1 = StringUtils.EMPTY; String tempPath = StringUtils.EMPTY; if (!new File(unzipPath).exists()) { new File(unzipPath).mkdir(); } ZipFile zipFile = null; try { zipFile = new ZipFile(fromZipFile, DEFAULT_CHARSET); } catch (IOException e1) { e1.printStackTrace(); throw new Exception(e1); } File temp = new File(unzipPath); String strPath = temp.getAbsolutePath(); Enumeration
enu = zipFile.getEntries(); ZipEntry zipEntry = null; while (enu.hasMoreElements()) { zipEntry = (ZipEntry) enu.nextElement(); path1 = zipEntry.getName(); if (zipEntry.isDirectory()) { tempPath = FilenameUtils.normalizeNoEndSeparator(strPath + File.separator + path1, true); File dir = new File(tempPath); dir.mkdirs(); continue; } else { BufferedInputStream bis = null; BufferedOutputStream bos = null; try { is = zipFile.getInputStream(zipEntry); bis = new BufferedInputStream(is); path1 = zipEntry.getName(); tempPath = FilenameUtils.normalizeNoEndSeparator(strPath + File.separator + path1, true); FolderUtils.mkdirs(new File(tempPath).getParent()); fos = new FileOutputStream(tempPath); bos = new BufferedOutputStream(fos); IOUtils.copy(bis, bos); } catch (IOException e) { e.printStackTrace(); throw new Exception(e); } finally { IOUtils.closeQuietly(bis); IOUtils.closeQuietly(bos); IOUtils.closeQuietly(is); IOUtils.closeQuietly(fos); } } } }}

 

转载于:https://www.cnblogs.com/lr393993507/p/5457374.html

你可能感兴趣的文章
useradd mfs -s /sbin/nologin -M
查看>>
vue+element-ui实现表格checkbox单选
查看>>
box-shadow
查看>>
select * 和select 1 以及 select count(*) 和select count(1)的区别
查看>>
进度条04
查看>>
Silverlight RadGridView的HeaderCellStyle样式
查看>>
IE兼容CSS3圆角border-radius的方法
查看>>
Elsevier期刊投稿状态
查看>>
Heartbeat+LVS构建高可用负载均衡集群
查看>>
多表查询
查看>>
springMVC_数据的处理过程
查看>>
ORM + Mysql配置
查看>>
18 python 初学(time、random 模块)
查看>>
那些年我们扔过的漂流瓶
查看>>
javascript:巧用eval函数组装表单输入项为json对象
查看>>
2.grep、awk、sed、cut处理文本
查看>>
为什么我们叫雪狼队
查看>>
wpf button变成圆角
查看>>
测试开发学习进阶教程 视频&PDF
查看>>
C#基础-连接Access与SQL Server
查看>>