您当前的位置: 首页 >  Java

小志的博客

暂无认证

  • 0浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

java压缩文件夹和文件实例

小志的博客 发布时间:2018-06-19 12:22:05 ,浏览量:0

package com.cn; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /**  * 压缩.zip文件类  * 创建者    :  xxx  * 创建日期: 2018年06月29日  * */ public class ZipCompressorByAnt { private static final int BUFFER_SIZE = 2 * 1024;        /**           * @param srcDir 压缩文件夹路径           * @param out 压缩文件输出流           * @param KeepDirStructure 是否保留原来的目录结构,           *  true:保留目录结构;           *  false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)           * @throws RuntimeException 压缩失败会抛出运行时异常           */

          public static boolean toZip(String[] srcDir, String outDir,boolean KeepDirStructure) 

               throws RuntimeException, Exception {

                  OutputStream out = new FileOutputStream(new File(outDir));                   long start = System.currentTimeMillis();                   ZipOutputStream zos = null;                   try {                        zos = new ZipOutputStream(out);                        List sourceFileList = new ArrayList();                        for (String dir : srcDir) {                             File sourceFile = new File(dir);                             sourceFileList.add(sourceFile);                        }                       compress(sourceFileList, zos, KeepDirStructure);                       long end = System.currentTimeMillis();                       System.out.println("压缩完成,耗时:" + (end - start) + " ms");                    } catch (Exception e) {                       throw new RuntimeException("zip error from ZipUtils", e);                    } finally {                          if (zos != null) {                             try {                                   zos.close();                              } catch (IOException e) {                                   e.printStackTrace();                              }                         }                     }             }          /**            * 递归压缩方法            * @param sourceFile 源文件            * @param zos zip输出流            * @param name 压缩后的名称            * @param KeepDirStructure 是否保留原来的目录结构,            *          true:保留目录结构;            *          false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)            * @throws Exception            */            private static void compress(File sourceFile, ZipOutputStream zos,                String name, boolean KeepDirStructure) throws Exception {                    byte[] buf = new byte[BUFFER_SIZE];                    if (sourceFile.isFile()) {                           zos.putNextEntry(new ZipEntry(name));                           int len;                           FileInputStream in = new FileInputStream(sourceFile);                           while ((len = in.read(buf)) != -1) {                                  zos.write(buf, 0, len);                            }                          // Complete the entry                          zos.closeEntry();                          in.close();                     } else {                          File[] listFiles = sourceFile.listFiles();                          if (listFiles == null || listFiles.length == 0) {                                 if (KeepDirStructure) {                                        zos.putNextEntry(new ZipEntry(name + "/"));                                        zos.closeEntry();                                 }                          } else {                                 for (File file : listFiles) {                                       if (KeepDirStructure) {                                            compress(file, zos, name + "/" + file.getName(),                                            KeepDirStructure);                                       } else {                                            compress(file, zos, file.getName(), KeepDirStructure);

                                      }

                                 }                  

                          }                     }             }             private static void compress(List sourceFileList,                 ZipOutputStream zos, boolean KeepDirStructure) throws Exception {                 byte[] buf = new byte[BUFFER_SIZE];                 for (File sourceFile : sourceFileList) {                          String name = sourceFile.getName();                          if (sourceFile.isFile()) {                                  zos.putNextEntry(new ZipEntry(name));                                  int len;                                  FileInputStream in = new FileInputStream(sourceFile);                                  while ((len = in.read(buf)) != -1) {                                             zos.write(buf, 0, len);                                   }                                   zos.closeEntry();                                  in.close();                            } else {                                  File[] listFiles = sourceFile.listFiles();                                  if (listFiles == null || listFiles.length == 0) {                                          if (KeepDirStructure) {                                                 zos.putNextEntry(new ZipEntry(name + "/"));                                                 zos.closeEntry();                                          }                                  } else {                                          for (File file : listFiles) {                                                 if (KeepDirStructure) {                                                        compress(file, zos, name + "/" + file.getName(),                                                        KeepDirStructure);                                                  } else {                                                        compress(file, zos, file.getName(),                                                        KeepDirStructure);                                                  }                                           }                                  }                            }                     }

            }

    public static void main(String[] args) throws Exception{                String pathFile="E:\\Files";//文件夹路径             String mainXmlPath="E:\\1.xml";//文件路径             String metaXmlPath="E:\\2.xml";//文件路径                 String[] srcDir = { pathFile,mainXmlPath,metaXmlPath};                 String outDir="E:\\mytest.zip";//压缩后的.zip路径                 toZip(srcDir, outDir, true);     }

}

压缩前效果图:

压缩后效果图:

关注
打赏
1661269038
查看更多评论
立即登录/注册

微信扫码登录

0.0407s