版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
最近遇到一个这样的需求:传一个压缩包给后台,后台保存后解压读取里面的文件,现学现做。在这里做个记录
文件上传
文件上传有很多方法,这里推荐一个自己感觉挺好用的一种,代码奉上:
@PostMapping(value = "/import", headers = "content-type=multipart/*")
public R importSqlLite(@RequestParam("file") MultipartFile file) {
String path = "C:/Users/aaa/Desktop/新建文件夹/";
File newFile = new File(path + file.getOriginalFilename());
//通过CommonsMultipartFile的方法直接写文件(注意这个时候)
file.transferTo(newFile);
}
文件解压
参考了很多博客,发现了两中解压方式,一种是用org.apache.tools.zip.ZipFile这个包的 工具一种是SpringBoot自带的net.lingala.zip4j.core.ZipFile。因为用的是SpringBoot项目就用的第二种,代码奉上:
//解压路径
private String dest = "C:\\Users\\aaa\\Desktop\\新建文件夹";
//解压后图片保存的路径
private String picPath = "C:/Users/aaa/Desktop/新建文件夹/pic";
public String Uncompress(String source) {
List<String> picPaths = new ArrayList<>();
try {
File zipFile = new File(source);
ZipFile zFile = new ZipFile(zipFile);// 首先创建ZipFile指向磁盘上的.zip文件
zFile.setFileNameCharset("GBK");
File destDir = new File(dest);// 解压目录
zFile.extractAll(dest);// 将文件抽出到解压目录
if (zFile.isEncrypted()) {
zFile.setPassword(password.toCharArray()); // 设置密码
}
zFile.extractAll(dest); // 将文件抽出到解压目录(解压)
List<net.lingala.zip4j.model.FileHeader > headerList = zFile.getFileHeaders();
List<File> extractedFileList= newArrayList<File>();
for(FileHeader fileHeader : headerList) {
if (!fileHeader.isDirectory()) {
extractedFileList.add(new File(destDir,fileHeader.getFileName()));
}
}
File [] extractedFiles = new File[extractedFileList.size()];
extractedFileList.toArray(extractedFiles);
for(File f:extractedFileList){
System.out.println(f.getAbsolutePath()+"....");
}
}catch(ZipException e) {
}