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();
}
}
}
}