Java io流之MultipartFile转换为ZipFile

这篇博客详细介绍了如何在Java中将接收到的MultipartFile对象转换为ZipFile进行处理,特别关注于处理上传的zip文件场景。通过实例代码和注释,帮助读者理解转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在文件上传中,通常我们会用MultipartFile进行接收;如果上传的为zip包,我们需要将file转换为zip进行操作。

2、案例加注释

package com.xu.io;

import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Optional;
import java.util.UUID;
import java.util.function.Predicate;
import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

/**
 * @author admin
 */
public class FileUtils {
    /**
     * 将MultipartFile转换为zipFile,用断言过滤
     * @param inFile
     */
    public void checkZip(MultipartFile inFile) {
        InputStream fileStream = null;
        File file = null;
        Stream<? extends ZipEntry> signStream = null;
        Stream<? extends ZipEntry> zipStream = null;
        ZipFile zipFile = null;
        //临时文件

        Path path = Paths.get(System.getProperty("java.io.tmpdir"), inFile.getName() + UUID.randomUUID() + "zip");
        file = path.toFile();
        try {
            fileStream = inFile.getInputStream();
            org.apache.commons.io.FileUtils.copyInputStreamToFile(fileStream, file);
            zipFile = new ZipFile(file, Charset.defaultCharset());
            signStream = zipFile.stream();
            zipStream = zipFile.stream();
            //断言
            Predicate<ZipEntry> signTxt = ze -> ze.getName().contains("sign,txt");
            Predicate<ZipEntry> zipTxt = ze -> ze.getName().endsWith(".zip");
            //,过滤
            Optional<ZipEntry> signInfo = (Optional<ZipEntry>) signStream.filter(signTxt).findFirst();
            Optional<ZipEntry> zipInfo = (Optional<ZipEntry>) zipStream.filter(zipTxt).findFirst();
            if (signInfo.isPresent() && zipInfo.isPresent()) {
                System.out.println("hello");
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                //关闭流

                fileStream.close();
                signStream.close();
                zipStream.close();
                zipFile.close();
                //删除临时文件

                org.apache.commons.io.FileUtils.deleteQuietly(file);
            } catch (IOException e) {
                e.printStackTrace();
            }

        }


    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值