亲测,粘贴即用,不可以直接评论,帮你解决;
pom.xml
<dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.9.4</version> </dependency>
java
package com.example.spreadjsexecl.zip; import java.io.*; import java.util.Enumeration; import java.util.zip.CRC32; import java.util.zip.CheckedInputStream; //使用org.apache.tools.zip这个就不会中文乱码 import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; public class unZip1 { public static void main(String[] args) throws Exception { try { unZipFile("F:\\1111\\", "F:\\1111\\1111\\", "13213.zip"); } catch (Exception e) { e.printStackTrace(); } } /** * @param filePath1 源文件路径 * @param outPath 文件路径 * @param fileName 文件名称 */ private static void unZipFile(String filePath1, String outPath, String fileName) throws Exception { String filePath = filePath1 + fileName; // 压缩文件的实列,并设置编码 ZipFile zipFile = new ZipFile(filePath, "GBK"); File file; // 获取压缩文中的所以项 for (Enumeration<ZipEntry> enumeration = zipFile.getEntries(); enumeration.hasMoreElements(); ) { // 获取元素 ZipEntry zipEntry = enumeration.nextElement(); // 排除空文件夹 if (!zipEntry.getName().endsWith(File.separator)) { String filename = zipEntry.getName(); boolean ismkdir = false; // 检查此文件是否带有文件夹 if (filename.lastIndexOf("/") != -1) { ismkdir = true; } filename = outPath + filename; // 如果是文件夹 过滤掉 不创建 if (zipEntry.isDirectory()) { continue; } String[] strArry = filename.split("/"); if (strArry.length == 1) { strArry = filename.split("\\\\"); } System.out.println(strArry[strArry.length - 1]); OutputStream os = new FileOutputStream(outPath + strArry[strArry.length - 1]);//创建解压后的文件 BufferedOutputStream bos = new BufferedOutputStream(os);//带缓的写出流 InputStream is = zipFile.getInputStream(zipEntry);//读取元素 BufferedInputStream bis = new BufferedInputStream(is);//读取流的缓存流 CheckedInputStream cos = new CheckedInputStream(bis, new CRC32());//检查读取流,采用CRC32算法,保证文件的一致性 byte[] b = new byte[1024];//字节数组,每次读取1024个字节 // 循环读取压缩文件的值 while (cos.read(b) != -1) { // 写入到新文件 bos.write(b); } cos.close(); bis.close(); is.close(); bos.close(); os.close(); } System.out.println("正在解压文件:" + zipEntry.getName()); System.out.println(zipEntry.getName().matches(".*.zip")); if (zipEntry.getName().matches(".*.zip")) { System.out.println(zipEntry.getName() + "是压缩文件-------------------"); String fname = null;// 文件名称 if (zipEntry.getName().indexOf("/") > -1) { String[] strArry = zipEntry.getName().split("/"); fname = strArry[strArry.length - 1]; }else{ fname = zipEntry.getName(); } OutputStream os = new FileOutputStream(outPath + fname);//创建解压后的文件 BufferedOutputStream bos = new BufferedOutputStream(os);//带缓的写出流 InputStream is = zipFile.getInputStream(zipEntry);//读取元素 BufferedInputStream bis = new BufferedInputStream(is);//读取流的缓存流 CheckedInputStream cos = new CheckedInputStream(bis, new CRC32());//检查读取流,采用CRC32算法,保证文件的一致性 byte[] b = new byte[1024];//字节数组,每次读取1024个字节 // 循环读取压缩文件的值 while (cos.read(b) != -1) { // 写入到新文件 bos.write(b); } cos.close(); bis.close(); is.close(); bos.close(); os.close(); unZipFile(outPath, outPath, fname); } } System.out.println("解压完成"); zipFile.close(); } }