java解压zip压缩包
坐在旁边的小伙伴问我怎么用 java 将服务器上的压缩文件解压出来,我索性给他写了个 demo ,也顺手记录一下。
实例代码
package com.yuhuofei.utils;
import java.io.*;
import java.nio.charset.charset;
import java.util.zip.zipentry;
import java.util.zip.zipinputstream;
/**
* @description
* @classname unziputils
* @author yuhuofei
* @date 2022/8/10 21:03
* @version 1.0
*/
public class unziputils {
/**
* 解压zip压缩文件到指定目录
*
* @param zippath zip压缩文件绝对路径
* @param descdir 指定的解压目录
*/
public static void unzipfile(string zippath, string descdir) throws ioexception {
try {
file zipfile = new file(zippath);
if (!zipfile.exists()) {
throw new ioexception("要解压的压缩文件不存在");
}
file pathfile = new file(descdir);
if (!pathfile.exists()) {
pathfile.mkdirs();
}
inputstream input = new fileinputstream(zippath);
unzipwithstream(input, descdir);
} catch (exception e) {
throw new ioexception(e);
}
}
/**
* 解压
*
* @param inputstream
* @param descdir
*/
public static void unzipwithstream(inputstream inputstream, string descdir) {
if (!descdir.endswith(file.separator)) {
descdir = descdir + file.separator;
}
try (zipinputstream zipinputstream = new zipinputstream(inputstream, charset.forname("gbk"))) {
zipentry zipentry;
while ((zipentry = zipinputstream.getnextentry()) != null) {
string zipentrynamestr = zipentry.getname();
string zipentryname = zipentrynamestr;
if (zipentrynamestr.contains("/")) {
string str1 = zipentrynamestr.substring(0, zipentrynamestr.indexof("/"));
zipentryname = zipentrynamestr.substring(str1.length() + 1);
}
string outpath = (descdir + zipentryname).replace("\\\\", "/");
file outfile = new file(outpath.substring(0, outpath.lastindexof('/')));
if (!outfile.exists()) {
outfile.mkdirs();
}
if (new file(outpath).isdirectory()) {
continue;
}
writefile(outpath, zipinputstream);
zipinputstream.closeentry();
}
system.out.println("======解压成功=======");
} catch (ioexception e) {
system.out.println("压缩包处理异常,异常信息{}" + e);
}
}
//将流写到文件中
public static void writefile(string filepath, zipinputstream zipinputstream) {
try (outputstream outputstream = new fileoutputstream(filepath)) {
byte[] bytes = new byte[4096];
int len;
while ((len = zipinputstream.read(bytes)) != -1) {
outputstream.write(bytes, 0, len);
}
} catch (ioexception ex) {
system.out.println("解压文件时,写出到文件出错");
}
}
//测试方法
public static void main(string[] args) throws ioexception {
string zippath = "d:/test/测试文件.zip";
string descdir = "d:/test/解压/";
unzipfile(zippath, descdir);
}
}
结果如下

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论