Java实现解压缩ZIP
2021/10/19 20:41:16
本文主要是介绍Java实现解压缩ZIP,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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方法获取数量及压缩文件中的文件名称,会出现一个名为压缩包文件名称的文件,数量同样多一个。*
这篇关于Java实现解压缩ZIP的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南