此文章有借鉴其他博客,具体网址找不到了,暂时写原创;
代码亲测,直接可以运行;不行评论,帮你解决;
pom.xml
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.9.4</version>
</dependency>
java
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
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 unZip{
public static void main(String[] args) {
try {
unZipFile("F:\\0000\\", "F:\\0000\\123\\", "123.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()) {
// 如果是文件夹先创建
file = new File(filename);
file.mkdirs();
continue;
}
file = new File(filename);
if (!file.exists()) {
// 如果是目录先创建
if (ismkdir) {
new File(filename.substring(0, filename.lastIndexOf("/"))).mkdirs(); //目录先创建
}
}
OutputStream os = new FileOutputStream(filename);//创建解压后的文件
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();
} else {
// 如果为空文件夹,则创建该文件夹
new File(outPath + zipEntry.getName()).mkdirs();
}
System.out.println("正在解压文件:" + zipEntry.getName());
System.out.println(zipEntry.getName().matches(".*.zip"));
if (zipEntry.getName().matches(".*.zip")) {
System.out.println(zipEntry.getName() + "是压缩文件-------------------");
unZipFile(outPath, outPath,zipEntry.getName());
}
}
System.out.println("解压完成");
zipFile.close();
}
}