代碼:html
1 package com.xiaobai; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java.nio.charset.Charset; 8 import java.util.Enumeration; 9 import java.util.zip.ZipEntry; 10 import java.util.zip.ZipFile; 11 12 public class UnZipUtils { 13 14 public static void main(String[] args) { 15 try { 16 //將temp下全部的壓縮文件解壓 17 unzipFromLoc("F:\\BaiduNetdiskDownload\\03_Hadoop"); 18 } catch (Exception e) { 19 e.printStackTrace(); 20 } 21 } 22 23 //從總目錄下解壓文件裏全部的壓縮包至目的文件路徑 24 public static void unzipFromLoc(String filePath) throws Exception{ 25 File file = new File(filePath); 26 File[] list = file.listFiles();//固定元素,不包含新產生的 27 String from = ""; 28 for(File f : list){ 29 if(f.isDirectory()) { 30 unzipFromLoc(f.getAbsolutePath()); 31 }else { 32 boolean bool = f.isFile(); 33 if(bool){ 34 from = f.getAbsolutePath(); 35 unZipFiles(new File(from),filePath); 36 } 37 } 38 } 39 } 40 41 /** 42 * 解壓文件到指定目錄 43 * 解壓後的文件名,和以前一致 44 * @param zipFile 待解壓的zip文件 45 * @param descDir 指定目錄 46 */ 47 public static void unZipFiles(File zipFile, String descDir) throws IOException { 48 try{ 49 ZipFile zip = new ZipFile(zipFile, Charset.forName("GBK"));//解決中文文件夾亂碼 50 File pathFile = new File(descDir); 51 if (!pathFile.exists()) { 52 pathFile.mkdirs(); 53 } 54 //即便有內層目錄,目錄裏的文件也是能夠在這裏遍歷出來的,只不過在內層目錄以後,並且是帶內層目錄的全路徑,因此解壓時須要判斷路徑是否存在, 55 // 不存在則建立內層目錄dir;判斷一下內層目錄,continue,目錄裏面的文件再寫 56 for (Enumeration<? extends ZipEntry> entries = zip.entries(); entries.hasMoreElements();) { 57 ZipEntry entry = (ZipEntry) entries.nextElement(); 58 String zipEntryName = entry.getName(); 59 InputStream in = zip.getInputStream(entry); 60 String outPath = (descDir + File.separator + zipEntryName).replaceAll("\\\\", "/"); 61 File file = new File(outPath); 62 if(entry.isDirectory()) {//有內層文件夾,須要建立新的內層目錄後continue,後面內層文件夾裏的壓縮文件纔有合法新路徑,不然內層文件夾裏的壓縮文件使用路徑建立流時報拒絕訪問異常,由於父目錄不存在 63 file.mkdirs();//是文件而不是文件夾路徑的不能寫這個,會建立到以文件名爲最終目錄名的全目錄致使與文件路徑衝突,下面流關聯文件時因讀取了同名文件夾而發生異常 64 continue; 65 } 66 // 輸出文件路徑信息 67 System.out.println(outPath); 68 FileOutputStream out = new FileOutputStream(outPath); 69 byte[] buf1 = new byte[1024]; 70 int len; 71 while ((len = in.read(buf1)) > 0) { 72 out.write(buf1, 0, len); 73 } 74 in.close(); 75 out.close(); 76 // unZipFiles(file, outPath.substring(0, outPath.lastIndexOf('/')));//可遞歸解壓zip,jar文件,不能解壓rar文件 77 } 78 System.out.println("******************解壓完畢********************"); 79 return; 80 }catch (Exception e) { 81 e.printStackTrace(); 82 } 83 } 84 }
參考:java
https://blog.csdn.net/weixin_41722928/article/details/80832481ide
https://blog.csdn.net/SicongFu/article/details/84997715oop
https://blog.csdn.net/zcc_0015/article/details/40454777spa
java中正則匹配反斜槓問題:.net