Erlo

zip解压和压缩

2023-06-30 15:30:11 发布   52 浏览  
页面报错/反馈
收藏 点赞

zip解压和压缩

引言

压缩文件

  • 准备压缩的源文件和目标zip文件的路径

  • 创建FileOutputStreamZipOutputStream对象

  • 创建源文件的FileFileInputStream对象

  • 创建ZipEntry对象,并设置其名称为源文件的名称

  • 使用ZipOutputStreamputNextEntry方法将ZipEntry对象添加到压缩文件中

  • 使用循环读取源文件的内容,并使用ZipOutputStreamwrite方法将内容写入压缩文件中

  • 关闭流对象

解压缩文件

  • 准备解压缩的zip文件路径和目标目录路径

  • 创建目标目录的File对象,如果目录不存在则创建目录

  • 创建ZipInputStream对象,使用FileInputStream和zip文件路径作为参数

  • 使用ZipInputStreamgetNextEntry方法获取zip文件的每个条目ZipEntry

  • 循环处理每个zip条目,获取条目的名称和文件内容,并将内容写入目标目录

  • 关闭流对象

  1. 示例代码

    创建zip工具类:

    import org.springframework.mock.web.MockMultipartFile;
    import org.springframework.web.multipart.MultipartFile;

    import java.io.*;
    import java.nio.charset.Charset;
    import java.util.*;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipInputStream;


    public class ZipUtil {
       // 解压并返回的key是全路径
       public static MapString, ListMultipartFile>> unzipAndConvertToMap(File file) throws IOException {
           MapString, ListMultipartFile>> map = new HashMap(); // 存放解压后的图片
           byte[] buffer = new byte[1024];
           ZipInputStream zis = new ZipInputStream(new FileInputStream(file),Charset.forName("GBK"));
           try {
               ZipEntry entry;
               while ((entry = zis.getNextEntry()) != null) {

                   if (!entry.isDirectory() && isImage(entry.getName())) { // 判断当前解压的是否是图片
                       // 获取到全路径名称
                       String allFileName = entry.getName();
                       String[] split = allFileName.split("/");
                       // // 图片名称
                       // String imageName = split[split.length - 1];
                       // // 第一层文件夹名称
                       // String firstFile = split[0];
                       StringBuffer sb = new StringBuffer();
                       for (int i = 1; i split.length-1; i++) {
                           sb.append(split[i]).append("/");
                      }
                       String folderName = sb.toString();
                       ListMultipartFile> imgList = map.getOrDefault(folderName, new ArrayList());
                       ByteArrayOutputStream baos = new ByteArrayOutputStream();
                       int len;
                       while ((len = zis.read(buffer)) > 0) {
                           baos.write(buffer, 0, len);
                      }
                       MultipartFile multipartFile = new MockMultipartFile(entry.getName(), entry.getName(), "", baos.toByteArray());
                       imgList.add(multipartFile);
                       map.put(folderName, imgList);
                  }
              }
          } finally {
               zis.close();
          }
           return map;
      }

登录查看全部

参与评论

评论留言

还没有评论留言,赶紧来抢楼吧~~

浏览 2967.05 万次 点击这里给我发消息

手机查看

返回顶部

给这篇文章打个标签吧~

棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认