• 压缩工具类


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

    源码如下:(点击下载 - ZipUtils.java 、FolderUtils.javaant-1.7.0.jarcommons-io-2.4.jarcommons-lang-2.6.jar)

    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<ZipEntry> 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);
                    }
                }
            }
        }
    }
  • 相关阅读:
    windows笔记进程的句柄
    windows笔记创建线程的函数CreateThread
    c#实现从其他网站抓取imei码信息,手工输入验证码
    Linux下自动修改用户密码的方法(直接通过命令而不是在终端输入密码)
    Redis学习笔记List数据类型
    在Linux(centos)上安装PHP的mongodb扩展
    CI(codeigniter)如何防止sql注入
    MongoDB增加用户认证: 增加用户、删除用户、修改用户密码、读写权限、只读权限
    Sublime Text编辑器如何显示顶部的菜单栏
    C#图片选择器
  • 原文地址:https://www.cnblogs.com/lr393993507/p/5457374.html
Copyright © 2020-2023  润新知