ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java实现解压缩ZIP

2021-10-19 18:02:54  阅读:216  来源: 互联网

标签:multipartFile Java File ZIP 解压缩 file entries new MultipartFile


Java实现解压缩ZIP

1、MultipartFile 转为File工具类

@Component
public class MultipartFileToFile {
    public File ultipartFileToFile(MultipartFile file) throws Exception {
        File toFile = null;
        if (file.equals("") || file.getSize() <= 0) {
            file = null;
        } else {
            InputStream ins = null;
            ins = file.getInputStream();
            toFile = new File(file.getOriginalFilename());
            inputStreamToFile(ins, toFile);
            ins.close();
        }
        return toFile;
    }

    //获取流文件
    private static void inputStreamToFile(InputStream ins, File file) {
        try {
            OutputStream os = new FileOutputStream(file);
            int bytesRead = 0;
            byte[] buffer = new byte[8192];
            while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
                os.write(buffer, 0, bytesRead);
            }
            os.close();
            ins.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

2、获取压缩文件中的全部文件名称

 @Resource
    private MultipartFileToFile multipartFileToFile;

    /**
     * 获取压缩文件中的全部文件名称
     * @param multipartFile
     * @return List
     */
    @PostMapping("getFileName")
    public R getFileName(MultipartFile multipartFile){
        //创建List,存放获取的文件名称
        List<String> list = new ArrayList<>();
        File file=null;
        try {
            //将MultipartFile转化为File
            file = multipartFileToFile.ultipartFileToFile(multipartFile);
            //创建ZipFile对象,解析file文件
            ZipFile zipFile = new ZipFile(file);
            //获取压缩文件中的文件个数
            int size = zipFile.size();
            Enumeration<? extends ZipEntry> entries = zipFile.entries();
            while (entries.hasMoreElements()) {
                list.add(entries.nextElement().getName());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(list);
        return R.ok().data("list",list);
    }

3、解压文件到指定目录

/**
     * 解压文件到指定目录
     * @param multipartFile
     * @return success/error
     */
    @PostMapping("decmpressionFile")
    public R decmpression(MultipartFile multipartFile){
        //指定压缩文件存放路径(最后一个/不能少)
        String descDir="F://online-education/";
        File Zipfile=null;
        try {
            //将MultipartFile转化为File
            Zipfile = multipartFileToFile.ultipartFileToFile(multipartFile);
            File pathFile = new File(descDir);
            if(!pathFile.exists())
            {
                pathFile.mkdirs();
            }
            //解决zip文件中有中文目录或者中文文件
            ZipFile zip = new ZipFile(Zipfile, Charset.forName("GBK"));
            for(Enumeration entries = zip.entries(); entries.hasMoreElements();)
            {
                ZipEntry entry = (ZipEntry)entries.nextElement();
                String zipEntryName = entry.getName();
                InputStream in = zip.getInputStream(entry);
                String outPath = (descDir+zipEntryName).replaceAll("\\*", "/");;
                //判断路径是否存在,不存在则创建文件路径
                File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));
                if(!file.exists())
                {
                    file.mkdirs();
                }
                //判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压
                if(new File(outPath).isDirectory())
                {
                    continue;
                }
                //输出文件路径信息
                System.out.println(outPath);
                OutputStream out = new FileOutputStream(outPath);
                byte[] buf1 = new byte[1024];
                int len;
                while((len=in.read(buf1))>0)
                {
                    out.write(buf1,0,len);
                }
                in.close();
                out.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return R.ok();
    }

*问题:将MultipartFile转化为File后,放到ZipFile中,使用zipFile.size方法获取数量及压缩文件中的文件名称,会出现一个名为压缩包文件名称的文件,数量同样多一个。*

标签:multipartFile,Java,File,ZIP,解压缩,file,entries,new,MultipartFile
来源: https://www.cnblogs.com/nlbz/p/15425847.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有