Java实现ZIP解压功能

java

1.引入依赖

<dependency>

<groupId>org.apache.ant</groupId>

<artifactId>ant</artifactId>

<version>1.9.6</version>

</dependency>

2.Java代码

public class ZipUtils {

private static Logger logger = LoggerFactory.getLogger(ZipUtils.class);

/**

*ZIP文件解压操作类

* @param path 解压的ZIP源文件路径 必须

* @param goalPath 解压的目标文件夹路径 非必须

* @param perFileName 解压文件的文件名前缀 非必须

* @return 返回解压图片和图片路径

* @throws Exception

*/

public static HashMap<String,String> unZip(String path, String goalPath, String perFileName) throws Exception{

int count = -1;

int index = -1;

String savePath = "";

InputStream in = null;

FileOutputStream fos = null;

BufferedOutputStream bos = null;

String goal_fileName ="";

int bufLength = 1024;

byte[] b = null;

HashMap<String,String> fileNameMap = new HashMap<String, String>();

try {

logger.debug("--解压缩文件:"+path);

ZipFile localFile = new ZipFile(path);

Enumeration<?> entries = localFile.getEntries();

while(entries.hasMoreElements()){

byte[] buf = new byte[bufLength];

ZipEntry tmpEntry = (ZipEntry) entries.nextElement();

String fileName = tmpEntry.getName();

// 得到文件的扩展名

String file_ext_name = fileName.substring(fileName.lastIndexOf(".") + 1);

if(file_ext_name.equals("jpg")||file_ext_name.equals("jpeg")||file_ext_name.equals("png")||file_ext_name.equals("gif")

||file_ext_name.equals("bmp")){

// 设置文件解压缩目标文件夹

if(goalPath!=null&&goalPath.length()!=0){

savePath = goalPath+ "/";

}else{

savePath = path.substring(0, path.lastIndexOf(".")) + "/";

}

File unZipFile = new File(savePath);

if(!unZipFile.exists()){

unZipFile.mkdir();

logger.debug("--解压缩输出目标文件夹不存在,创建目标文件夹"+savePath);

}

// 组装解压的目标文件

if(perFileName!=null&&perFileName.length()!=0){

goal_fileName = perFileName+"_"+fileName;

}else{

goal_fileName = fileName;

}

// 上传的图片格式

fileName = savePath + goal_fileName;

logger.debug("--解压文件:"+fileName);

File file = new File(fileName);

file.createNewFile();

in = localFile.getInputStream(tmpEntry);

fos = new FileOutputStream(file);

bos = new BufferedOutputStream(fos,bufLength);

while((count = in.read(buf))>-1){

bos.write(buf,0,count);

}

fileNameMap.put(goal_fileName,fileName);

bos.flush();

// 关闭资源

closeResource(bos,fos,in);

// 如果是gif格式的图片,则生成临时gif文件,并获取gif图片的第一帧

if (file_ext_name.trim().equals("gif")|| file_ext_name.trim().equals("GIF")) {

logger.debug("####上传的图片格式为:file_ext_name:"+file_ext_name);

// 临时文件夹

String tmpUrl = goalPath + "/gifTmp";

File gifTmpFiles = new File(tmpUrl);

if (!gifTmpFiles.exists()) {

gifTmpFiles.mkdirs();

}

// 临时gif图片

File gifTmpFile = new File(tmpUrl, goal_fileName);

File gifLocalFile = new File(fileName);

FileUtil.copyFile(gifLocalFile, gifTmpFile);

// 获取gif图片的第一帧

try{

b = ImageUtils.returnGifFirstByte(gifTmpFile.getAbsolutePath());

}catch (Exception e){

logger.error("--获取gif图片的第一帧失败",e);

throw new Exception(e);

}

// 删除临时gif图片

logger.debug("####删除GIF文件临时文件:gifTmpFile:"+gifTmpFile.getAbsolutePath());

gifTmpFile.delete();

logger.debug("####删除GIF本地解压文件:gifLocalFile:"+gifLocalFile.getAbsolutePath());

//删除原始本地GIF图片

gifLocalFile.delete();

// 保存原图片

if (b == null || b.length <= 0) {

logger.error("GIF文件为空,解压失败!"+fileName);

throw new Exception("gif fail");

}else{

fileName = fileName.substring(0,fileName.lastIndexOf("."))+".jpg";

logger.debug("####GIF文件转换为本地JPG文件:fileName:"+fileName);

FileOutputStream out = new FileOutputStream(fileName);

out.write(b);

out.close();

}

}

fileNameMap.put(goal_fileName,fileName);

}else{

logger.error("#####文件格式不合法,拒绝解压缩!fileName:"+fileName);

}

}

// 删除解压缩文件

Util.delUrlLocalFile(path);

try {

if(localFile!=null){

localFile.close();

}

} catch (IOException e) {

logger.error("localFile关闭失败!",e);

localFile.close();

}

} catch (Exception e) {

logger.error("zip文件解压失败!",e);

throw new Exception(e);

}

return fileNameMap;

}

public static void closeResource(BufferedOutputStream bos,FileOutputStream fos,InputStream in){

try{

if(bos!=null){

bos.close();

}

}catch(Exception e){

logger.error("BufferedOutputStream关闭失败!",e);

}

try{

if(fos!=null){

fos.close();

}

}catch(Exception e){

logger.error("FileOutputStream关闭失败!",e);

}

try{

if(in!=null){

in.close();

}

}catch(Exception e){

logger.error("inputstream关闭失败!",e);

}

}

}

由于涉及的业务是图片的打包文件,代码仅写了图片文件的解压。

以上是 Java实现ZIP解压功能 的全部内容, 来源链接: utcz.com/z/389569.html

回到顶部