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. }

猜你喜欢

转载自blog.csdn.net/qq_36318234/article/details/79962537