我是靠谱客的博主 平常啤酒,最近开发中收集的这篇文章主要介绍java 解压缩 工具类_Java实现的zip压缩及解压缩工具类示例,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文实例讲述了Java实现的zip压缩及解压缩工具类。分享给大家供大家参考,具体如下:

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.util.Enumeration;

import org.apache.tools.zip.ZipEntry;

import org.apache.tools.zip.ZipFile;

import org.apache.tools.zip.ZipOutputStream;

public class ZipUtil {

private static final int BUFFEREDSIZE = 1024;

/**

* 压缩文件

*

* @param zipFileName

* 保存的压缩包文件路径

* @param filePath

* 需要压缩的文件夹或者文件路径

* @param isDelete

* 是否删除源文件

* @throws Exception

*/

public void zip(String zipFileName, String filePath, boolean isDelete) throws Exception {

zip(zipFileName, new File(filePath), isDelete);

}

/**

* 压缩文件

*

* @param zipFileName

* 保存的压缩包文件路径

* @param inputFile

* 需要压缩的文件夹或者文件

* @param isDelete

* 是否删除源文件

* @throws Exception

*/

public void zip(String zipFileName, File inputFile, boolean isDelete) throws Exception {

ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));

if (!inputFile.exists()) {

throw new FileNotFoundException("在指定路径未找到需要压缩的文件!");

}

zip(out, inputFile, "", isDelete);

out.close();

}

/**

* 递归压缩方法

*

* @param out

* 压缩包输出流

* @param f

* 需要压缩的文件

* @param base

* 压缩的路径

* @param isDelete

* 是否删除源文件

* @throws Exception

*/

private void zip(ZipOutputStream out, File inputFile, String base, boolean isDelete) throws Exception {

if (inputFile.isDirectory()) { // 如果是目录

File[] inputFiles = inputFile.listFiles();

out.putNextEntry(new ZipEntry(base + "/"));

base = base.length() == 0 ? "" : base + "/";

for (int i = 0; i < inputFiles.length; i++) {

zip(out, inputFiles[i], base + inputFiles[i].getName(), isDelete);

}

} else { // 如果是文件

if (base.length() > 0) {

out.putNextEntry(new ZipEntry(base));

} else {

out.putNextEntry(new ZipEntry(inputFile.getName()));

}

FileInputStream in = new FileInputStream(inputFile);

try {

int len;

byte[] buff = new byte[BUFFEREDSIZE];

while ((len = in.read(buff)) != -1) {

out.write(buff, 0, len);

}

} catch (IOException e) {

throw e;

} finally {

in.close();

}

}

if (isDelete) {

inputFile.delete();

}

}

/**

* 解压缩

*

* @param zipFilePath

* 压缩包路径

* @param fileSavePath

* 解压路径

* @param isDelete

* 是否删除源文件

* @throws Exception

*/

public void unZip(String zipFilePath, String fileSavePath, boolean isDelete) throws Exception {

try {

(new File(fileSavePath)).mkdirs();

File f = new File(zipFilePath);

if ((!f.exists()) && (f.length() <= 0)) {

throw new Exception("要解压的文件不存在!");

}

ZipFile zipFile = new ZipFile(f);

String strPath, gbkPath, strtemp;

File tempFile = new File(fileSavePath);// 从当前目录开始

strPath = tempFile.getAbsolutePath();// 输出的绝对位置

Enumeration e = zipFile.getEntries();

while (e.hasMoreElements()) {

org.apache.tools.zip.ZipEntry zipEnt = e.nextElement();

gbkPath = zipEnt.getName();

if (zipEnt.isDirectory()) {

strtemp = strPath + File.separator + gbkPath;

File dir = new File(strtemp);

dir.mkdirs();

continue;

} else {

// 读写文件

InputStream is = zipFile.getInputStream(zipEnt);

BufferedInputStream bis = new BufferedInputStream(is);

gbkPath = zipEnt.getName();

strtemp = strPath + File.separator + gbkPath;

// 建目录

String strsubdir = gbkPath;

for (int i = 0; i < strsubdir.length(); i++) {

if (strsubdir.substring(i, i + 1).equalsIgnoreCase("/")) {

String temp = strPath + File.separator + strsubdir.substring(0, i);

File subdir = new File(temp);

if (!subdir.exists())

subdir.mkdir();

}

}

FileOutputStream fos = new FileOutputStream(strtemp);

BufferedOutputStream bos = new BufferedOutputStream(fos);

int len;

byte[] buff = new byte[BUFFEREDSIZE];

while ((len = bis.read(buff)) != -1) {

bos.write(buff, 0, len);

}

bos.close();

fos.close();

}

}

} catch (Exception e) {

e.printStackTrace();

throw e;

}

if (isDelete) {

new File(zipFilePath).delete();

}

}

// public static void main(String[] args) {

// ZipUtil cpr = new ZipUtil();

// try {

// cpr.zip("C:/Users/Lenovo User/Desktop/test中文.zip", "C:/Users/Lenovo User/Desktop/新建文件夹", false);

// cpr.unZip("C:/Users/Lenovo User/Desktop/test中文.zip", "C:/Users/Lenovo User/Desktop/新建文件夹2", false);

// } catch (Exception e) {

// e.printStackTrace();

// }

//

// }

}

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

最后

以上就是平常啤酒为你收集整理的java 解压缩 工具类_Java实现的zip压缩及解压缩工具类示例的全部内容,希望文章能够帮你解决java 解压缩 工具类_Java实现的zip压缩及解压缩工具类示例所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部