Java实现Zip解压 压缩包

对zip压缩包的解压是比较常见的应用场景,java代码的实现也很简单。废话不多说,直接上代码吧
一、代码
 
  
  1. /**
  2. * zip解压
  3. * @param srcFile zip源文件
  4. * @param destDirPath 解压后的目标文件夹
  5. * @throws RuntimeException 解压失败会抛出运行时异常
  6. */
  7. public static void unZip(File srcFile, String destDirPath) throws RuntimeException {
  8. long start = System.currentTimeMillis();
  9. // 判断源文件是否存在
  10. if (!srcFile.exists()) {
  11. throw new RuntimeException(srcFile.getPath() + "所指文件不存在");
  12. }
  13. // 开始解压
  14. ZipFile zipFile = null;
  15. try {
  16. zipFile = new ZipFile(srcFile);
  17. Enumeration<?> entries = zipFile.entries();
  18. while (entries.hasMoreElements()) {
  19. ZipEntry entry = (ZipEntry) entries.nextElement();
  20. System.out.println("解压" + entry.getName());
  21. // 如果是文件夹,就创建个文件夹
  22. if (entry.isDirectory()) {
  23. String dirPath = destDirPath + "/" + entry.getName();
  24. File dir = new File(dirPath);
  25. dir.mkdirs();
  26. } else {
  27. // 如果是文件,就先创建一个文件,然后用io流把内容copy过去
  28. File targetFile = new File(destDirPath + "/" + entry.getName());
  29. // 保证这个文件的父文件夹必须要存在
  30. if(!targetFile.getParentFile().exists()){
  31. targetFile.getParentFile().mkdirs();
  32. }
  33. targetFile.createNewFile();
  34. // 将压缩文件内容写入到这个文件中
  35. InputStream is = zipFile.getInputStream(entry);
  36. FileOutputStream fos = new FileOutputStream(targetFile);
  37. int len;
  38. byte[] buf = new byte[BUFFER_SIZE];
  39. while ((len = is.read(buf)) != -1) {
  40. fos.write(buf, 0, len);
  41. }
  42. // 关流顺序,先打开的后关闭
  43. fos.close();
  44. is.close();
  45. }
  46. }
  47. long end = System.currentTimeMillis();
  48. System.out.println("解压完成,耗时:" + (end - start) +" ms");
  49. } catch (Exception e) {
  50. throw new RuntimeException("unzip error from ZipUtils", e);
  51. } finally {
  52. if(zipFile != null){
  53. try {
  54. zipFile.close();
  55. } catch (IOException e) {
  56. e.printStackTrace();
  57. }
  58. }
  59. }
  60. }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值