java打包下载(新增递归压缩,指定路径压缩)

xiaoxiao2021-02-27  331

java打包下载,下面的工具类新增了递归压缩,指定路径压缩的方法

import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /**  *   * 压缩文件工具类  *   * @see [相关类/方法]  * @since [产品/模块版本]  */ public class ZipUtils {          /**      *       * 压缩文件夹或单个文件      *       * @param srcFile 目录或者单个文件url      * @param zipFile 压缩后的ZIP文件url      * @throws Exception      * @see [类、类#方法、类#成员]      */     public static void doCompress(String srcFile, String zipFile)         throws Exception     {         doCompress(new File(srcFile), new File(zipFile));     }          /**      *       * 压缩文件夹或单个文件      *       * @param srcFile 目录或者单个文件      * @param destFile 压缩后的ZIP文件      * @throws Exception      * @see [类、类#方法、类#成员]      */     public static void doCompress(File srcFile, File destFile)         throws Exception     {         ZipOutputStream out = new ZipOutputStream(new FileOutputStream(destFile));         if (srcFile.isDirectory())         {             File[] files = srcFile.listFiles();             for (File file : files)             {                 doCompress(file, out);             }         }         else         {             doCompress(srcFile, out);         }     }          /**      *       * 压缩单个文件      *       * @param pathname 文件完整url      * @param out ZipOutputStream      * @throws IOException      * @see [类、类#方法、类#成员]      */     public static void doCompress(String pathname, ZipOutputStream out)         throws IOException     {         doCompress(new File(pathname), out);     }          /**      *       * 压缩单个文件      *       * @param file File实体类      * @param out ZipOutputStream      * @throws IOException      * @see [类、类#方法、类#成员]      */     public static void doCompress(File file, ZipOutputStream out)         throws IOException     {         if (file.exists())         {             byte[] buffer = new byte[1024];             FileInputStream fis = new FileInputStream(file);             out.putNextEntry(new ZipEntry(file.getName()));             int len = 0;             // 读取文件的内容,打包到zip文件             while ((len = fis.read(buffer)) > 0)             {                 out.write(buffer, 0, len);             }             out.flush();             out.closeEntry();             fis.close();         }     }          /**      * 递归压缩文件      *       * @param source 源路径,可以是文件,也可以目录      * @param destinct 目标路径,压缩文件名      * @throws IOException      */     @SuppressWarnings("rawtypes")     public static void compressRecursion(String source, String destinct)         throws IOException     {         List fileList = loadFilename(new File(source));         ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File(destinct)));                  byte[] buffere = new byte[8192];         int length;         BufferedInputStream bis;                  for (int i = 0; i < fileList.size(); i++)         {             File file = (File)fileList.get(i);             zos.putNextEntry(new ZipEntry(getEntryName(source, file)));             bis = new BufferedInputStream(new FileInputStream(file));                          while (true)             {                 length = bis.read(buffere);                 if (length == -1)                     break;                 zos.write(buffere, 0, length);             }             bis.close();             zos.closeEntry();         }         zos.close();     }          /**      * 递归压缩文件      *       * @param source 要压缩的文件夹或文件的列表      * @param destinct 目标路径,压缩文件名      * @throws IOException      */     @SuppressWarnings("rawtypes")     public static void compressRecursion(List<String> primaryPath, String destinct)         throws IOException     {                  ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File(destinct)));         for (String path : primaryPath)         {             List fileList = loadFilename(new File(path));                          byte[] buffere = new byte[8192];             int length;             BufferedInputStream bis;                          for (int i = 0; i < fileList.size(); i++)             {                 File file = (File)fileList.get(i);                 zos.putNextEntry(new ZipEntry(getEntryName(path, file)));                 bis = new BufferedInputStream(new FileInputStream(file));                                  while (true)                 {                     length = bis.read(buffere);                     if (length == -1)                         break;                     zos.write(buffere, 0, length);                 }                 bis.close();                 zos.closeEntry();             }         }         zos.close();              }          /**      * 递归压缩文件      *       * @param source 要压缩的文件夹或文件的列表      * @param destinct 目标路径,压缩文件名      * @throws IOException      */     @SuppressWarnings("rawtypes")     public static void compressRecursion(List<String> primaryPath, ZipOutputStream zos)         throws IOException     {                  for (String path : primaryPath)         {             List fileList = loadFilename(new File(path));                          byte[] buffere = new byte[8192];             int length;             BufferedInputStream bis;                          for (int i = 0; i < fileList.size(); i++)             {                 File file = (File)fileList.get(i);                 zos.putNextEntry(new ZipEntry(getEntryName(path, file)));                 bis = new BufferedInputStream(new FileInputStream(file));                                  while (true)                 {                     length = bis.read(buffere);                     if (length == -1)                         break;                     zos.write(buffere, 0, length);                 }                 bis.close();                 zos.closeEntry();             }         }                  zos.close();              }          /**      *       * 递归压缩文件并重命名      * @param zipFiles      *          文件路径新文件名封装实体      * @param zos      * @throws IOException      * @see [类、类#方法、类#成员]      */     @SuppressWarnings("rawtypes")     public static void compressRecursionRename(List<ZipFile> zipFiles, ZipOutputStream zos)         throws IOException     {         int j=0;         for (ZipFile zipFile : zipFiles)         {             j++;             List fileList = loadFilename(new File(zipFile.getPhysicalFilePath()));                          byte[] buffere = new byte[8192];             int length;             BufferedInputStream bis;                          for (int i = 0; i < fileList.size(); i++)             {                 File file = (File)fileList.get(i);                 zos.putNextEntry(new ZipEntry((j)+"_"+zipFile.getNodeTypefileName()));                 bis = new BufferedInputStream(new FileInputStream(file));                                  while (true)                 {                     length = bis.read(buffere);                     if (length == -1)                         break;                     zos.write(buffere, 0, length);                 }                                  bis.close();                 zos.closeEntry();             }         }                  zos.close();     }          /**      * 递归获得该文件下所有文件名(不包括目录名)      *       * @param file      * @return      */     @SuppressWarnings({"rawtypes", "unchecked"})     public static List loadFilename(File file)     {         List filenameList = new ArrayList();         if (file.isFile())         {             filenameList.add(file);         }         if (file.isDirectory())         {             for (File f : file.listFiles())             {                 filenameList.addAll(loadFilename(f));             }         }         return filenameList;     }          /**      * 获得zip entry 字符串      *       * @param base      * @param file      * @return      */     public static String getEntryName(String base, File file)     {         File baseFile = new File(base);         String filename = file.getPath();         // int index=filename.lastIndexOf(baseFile.getName());         if (baseFile.getParentFile().getParentFile() == null)             return filename.substring(baseFile.getParent().length());         return filename.substring(baseFile.getParent().length() + 1);     }          /**      *       * 压缩指定路径的文件      *       * @param primaryPath 指定的所有文件路径      * @param zipFilePath 要解压到的文件路径以及全文件名      * @throws FileNotFoundException,Exception      * @see [类、类#方法、类#成员]      */     public static void compressUseAppointPath(List<String> primaryPath, String zipFilePath)         throws FileNotFoundException, Exception     {         ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFilePath));         byte[] buffere = new byte[8192];         int length;         BufferedInputStream bis;                  for (String path : primaryPath)         {             File file = new File(path);             zos.putNextEntry(new ZipEntry(file.getName()));             bis = new BufferedInputStream(new FileInputStream(file));                          while (true)             {                 length = bis.read(buffere);                 if (length == -1)                     break;                 zos.write(buffere, 0, length);             }             bis.close();             zos.closeEntry();         }         zos.close();     }          /**      *       * 压缩指定文件夹的所有文件——不带文件夹      *       * @param primaryPath      * @param zipFilePath      * @throws FileNotFoundException,Exception      * @see [类、类#方法、类#成员]      */     public static void compressUseAppointDirPath(List<String> primaryPath, String zipFilePath)         throws FileNotFoundException, Exception     {         ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFilePath));         byte[] buffere = new byte[8192];         int length;         BufferedInputStream bis;                  for (String path : primaryPath)         {             File file = new File(path);             if (file.isFile())             {                 zos.putNextEntry(new ZipEntry(file.getName()));                 bis = new BufferedInputStream(new FileInputStream(file));                                  while (true)                 {                     length = bis.read(buffere);                     if (length == -1)                         break;                     zos.write(buffere, 0, length);                 }                 bis.close();                 zos.closeEntry();             }             if (file.isDirectory())             {                 for (File f : file.listFiles())                 {                     zos.putNextEntry(new ZipEntry(f.getName()));                     bis = new BufferedInputStream(new FileInputStream(f));                                          while (true)                     {                         length = bis.read(buffere);                         if (length == -1)                             break;                         zos.write(buffere, 0, length);                     }                     bis.close();                     zos.closeEntry();                 }             }                      }         zos.close();     }          public static void main(String[] args)         throws FileNotFoundException, Exception     {                  List<String> primaryPath = new ArrayList<String>();         primaryPath.add("D:/hsfile/contractfile/PJ1503902085962/2a9a091485214259bdc3e184811de72e");         primaryPath.add("D:\\test1.csv");         primaryPath.add("D:\\aaa.xls");         primaryPath.add("D:\\temp2.pdf");         compressUseAppointDirPath(primaryPath, "D:\\mytest.zip");     }      }

转载请注明原文地址: https://www.6miu.com/read-2389.html

最新回复(0)