- 浏览: 6521 次
-
文章分类
最新评论
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Enumeration; import org.apache.commons.compress.archivers.zip.Zip64Mode; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; import org.apache.commons.compress.archivers.zip.ZipFile; import org.apache.commons.compress.utils.IOUtils; /** * Zip工具栏类,依赖于commons-compress-1.5.jar。 * * @author Elfy * @date 2013年02月25日 */ public class ZipUtil { // public static void main(String[] args){ // try { // //new ZipUtil().decompressZip(new // File("d://img.zip"),"img/pic20140626.jpg","d://"); // new ZipUtil().decompressZip(new File("d://img.zip"),"flight.log","d://"); // //new File("d://flight.log").delete(); // //ZipUtil.compress(new File("D://测试压缩文件"),new File("d://img.zip")); // // ZipUtil.compress(new File[]{new // File("F:/testZIP/testzip.txt"),new File("d://ftp"),new // File("e://ftp")},new File("d://压缩文件.zip")); // } catch (IOException e) { // e.printStackTrace(); // } // } /** * 把N多文件或文件夹压缩成zip。 * * @param files * 需要压缩的文件或文件夹。 * @param zipFilePath * 压缩后的zip文件 * @throws IOException * 压缩时IO异常。 * @author Elfy * @date 2013年02月25日 */ public static void compress(File[] files, File zipFile) throws IOException { if (CollectionUtil.isEmpty(files)) { return; } ZipArchiveOutputStream out = new ZipArchiveOutputStream(zipFile); out.setUseZip64(Zip64Mode.AsNeeded); // 将每个文件用ZipArchiveEntry封装 for (File file : files) { if (file == null) { continue; } compressOneFile(file, out, ""); } if (out != null) { out.close(); } } /** * 功能:压缩文件或文件夹。 * * @author Elfy * @date 2013年02月25日 * @param srcFile * 源文件。 * @param destFile * 压缩后的文件 * @throws IOException * 压缩时出现了异常。 */ public static void compress(File srcFile, File destFile) throws IOException { ZipArchiveOutputStream out = null; try { out = new ZipArchiveOutputStream(new BufferedOutputStream( new FileOutputStream(destFile), 1024)); compressOneFile(srcFile, out, ""); } finally { out.close(); } } /** * 功能:压缩单个文件,非文件夹。私有,不对外开放。 * * @author Elfy * @date 2013年02月25日 * @param srcFile * 源文件,不能是文件夹。 * @param out * 压缩文件的输出流。 * @param destFile * 压缩后的文件 * @param dir * 在压缩包中的位置,根目录传入/。 * @throws IOException * 压缩时出现了异常。 */ private static void compressOneFile(File srcFile, ZipArchiveOutputStream out, String dir) throws IOException { if (srcFile.isDirectory()) {// 对文件夹进行处理。 ZipArchiveEntry entry = new ZipArchiveEntry(dir + srcFile.getName() + "/"); out.putArchiveEntry(entry); out.closeArchiveEntry(); // 循环文件夹中的所有文件进行压缩处理。 String[] subFiles = srcFile.list(); for (String subFile : subFiles) { compressOneFile(new File(srcFile.getPath() + "/" + subFile), out, (dir + srcFile.getName() + "/")); } } else { // 普通文件。 InputStream is = null; try { is = new BufferedInputStream(new FileInputStream(srcFile)); // 创建一个压缩包。 ZipArchiveEntry entry = new ZipArchiveEntry(srcFile, dir + srcFile.getName()); out.putArchiveEntry(entry); IOUtils.copy(is, out); out.closeArchiveEntry(); } finally { if (is != null) is.close(); } } } /** * 功能:解压缩zip压缩包下的所有文件。 * * @author Elfy * @date 2013年02月25日 * @param zipFile * zip压缩文件 * @param dir * 解压缩到这个路径下 * @throws IOException * 文件流异常 */ public void decompressZip(File zipFile, String dir) throws IOException { ZipFile zf = new ZipFile(zipFile); try { for (Enumeration<ZipArchiveEntry> entries = zf.getEntries(); entries .hasMoreElements();) { ZipArchiveEntry ze = entries.nextElement(); // 不存在则创建目标文件夹。 File targetFile = new File(dir, ze.getName()); // 遇到根目录时跳过。 if (ze.getName().lastIndexOf("/") == (ze.getName().length() - 1)) { continue; } // 如果文件夹不存在,创建文件夹。 if (!targetFile.getParentFile().exists()) { targetFile.getParentFile().mkdirs(); } InputStream i = zf.getInputStream(ze); OutputStream o = null; try { o = new FileOutputStream(targetFile); IOUtils.copy(i, o); } finally { if (i != null) { i.close(); } if (o != null) { o.close(); } } } } finally { zf.close(); } } /** * 功能:解压缩zip压缩包下的某个文件信息。 * * @author Elfy * @date 2013年02月25日 * @param zipFile * zip压缩文件 * @param fileName * 某个文件名,例如abc.zip下面的a.jpg,需要传入/abc/a.jpg。 * @param dir * 解压缩到这个路径下 * @throws IOException * 文件流异常 */ public void decompressZip(File zipFile, String fileName, String dir) throws IOException { // 不存在则创建目标文件夹。 File targetFile = new File(dir, fileName); if (!targetFile.getParentFile().exists()) { targetFile.getParentFile().mkdirs(); } ZipFile zf = new ZipFile(zipFile); Enumeration<ZipArchiveEntry> zips = zf.getEntries(); ZipArchiveEntry zip = null; while (zips.hasMoreElements()) { zip = zips.nextElement(); if (fileName.equals(zip.getName())) { OutputStream o = null; InputStream i = zf.getInputStream(zip); try { o = new FileOutputStream(targetFile); IOUtils.copy(i, o); } finally { if (i != null) { i.close(); } if (o != null) { o.close(); } } } } } /** * 功能:得到zip压缩包下的某个文件信息,只能在根目录下查找。 * * @author Elfy * @date 2013年02月25日 * @param zipFile * zip压缩文件 * @param fileName * 某个文件名,例如abc.zip下面的a.jpg,需要传入/abc/a.jpg。 * @return ZipArchiveEntry 压缩文件中的这个文件,没有找到返回null。 * @throws IOException * 文件流异常 */ public ZipArchiveEntry readZip(File zipFile, String fileName) throws IOException { ZipFile zf = new ZipFile(zipFile); Enumeration<ZipArchiveEntry> zips = zf.getEntries(); ZipArchiveEntry zip = null; while (zips.hasMoreElements()) { zip = zips.nextElement(); if (fileName.equals(zip.getName())) { return zip; } } return null; } /** * 功能:得到zip压缩包下的所有文件信息。 * * @author Elfy * @date 2013年02月25日 * @param zipFile * zip压缩文件 * @return Enumeration<ZipArchiveEntry> 压缩文件中的文件枚举。 * @throws IOException * 文件流异常 */ public Enumeration<ZipArchiveEntry> readZip(File zipFile) throws IOException { ZipFile zf = new ZipFile(zipFile); Enumeration<ZipArchiveEntry> zips = zf.getEntries(); return zips; } }
您的支持是我不断分享的动力!
![](/images/smiles/icon_biggrin.gif)
发表评论
-
spring MVC原理 TG【2013-04-08】
2017-04-28 11:28 653概述--Spring MVC工作流程图 图一 ... -
JAVA基础篇【工具类】加密解密(一)DES加密和解密 TG【20130331整理】
2016-11-28 10:24 0import java.io.UnsupportedEn ... -
JAVA基础篇【工具类】MathUtil 数学运算辅助类TG【20130324整理】
2016-11-28 10:17 531数学运算辅助类,希望对大家有所帮助 import java ... -
JAVA基础篇【工具类】CollectionUtil 集合操作工具类 TG【20130318整理】
2016-11-28 10:13 591集合操作工具类 import java.util.Colle ... -
JAVA基础篇【工具类】 SpellHelper 汉字转拼音 TG【20130318整理】
2016-11-28 10:00 469SpellHelper 该类是将汉字转化为拼音的工具类 ... -
JAVA基础篇【工具类】FtpUtil TG【20130317整理】
2016-11-28 09:51 268Ftp工具 在我们编程的时候,我们经常会遇到链接ftp存文件和 ... -
推荐CSS工具资源TG【20110309整理】
2016-11-14 17:27 369456 Berea Street http://www.45 ... -
JAVA基础篇【工具类】StringUtilsTG【20130316整理】
2016-11-14 17:29 342JAVA基础篇【工具类】StringUtilsTG【20110 ... -
浅谈JavaScript&TypeeScriptTG【20130305整理】
2016-11-14 17:02 4411.JavaScript 在1995年时 ...
相关推荐
JAVA程序员必读基础篇.zip
笔记_JAVA基础篇,面试必问的那些事 笔记_JAVA基础篇,面试必问的那些事 笔记_JAVA基础篇,面试必问的那些事 笔记_JAVA基础篇,面试必问的那些事
今天小编就为大家分享一篇关于java字符串中${}或者{}等的占位符替换工具类,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
本书是java程序设计的基础篇。是英文版的。适合英语水平较好的java初学者观看。也适合开发人员的参考用书。中文版的可以进一步咨询QQ945745429
Java所有工具篇Java所有工具篇Java所有工具篇Java所有工具篇Java所有工具篇Java所有工具篇Java所有工具篇
本篇文章将详细介绍如何使用Java语言实现Http和Https请求的工具类,包括如何建立Https连接、如何实现Post请求、如何处理SSL验证等内容。 在Java中,使用HttpURLConnection类可以实现Http和Https请求,但是对于...
5G基础信令详解(深入浅出详细整理汇篇版).zip5G基础信令详解(深入浅出详细整理汇篇版).zip5G基础信令详解(深入浅出详细整理汇篇版).zip5G基础信令详解(深入浅出详细整理汇篇版).zip5G基础信令详解(深入浅出...
java语言程序设计基础篇答案 本文的答案是英文版的。反正个人感觉挺好的!
java技术教程基础篇java技术教程基础篇
本书是Java语言的经典教材,中文版分为基础篇和进阶篇,主要介绍程序设计基础、面向对象程序设计、GUI程序设计、数据结构和算法、高级Java程序设计等内容。本书以示例讲解解决问题的技巧,提供大量的程序清单,每章配...
Java 基础篇26-30
Java基础篇全套视频教程,轻松从0开始入门Java,到精通Java技术
在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类。以下工具类、方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码。 一. org.apache.commons.io....
《Java语言程序设计——基础篇》是Java语言的经典教材,中文版分为《Java语言程序设计基础篇》和《Java语言程序设计进阶篇》主要介绍语法结构、面向对象程序设计基础知识到面向对象程序设计、图形用户界面设计、异常...
java程序语言设计 梁勇 第十版(基础篇+进阶篇) 课后习题答案
JAVA语言程序设计与数据结构第十一版基础篇答案源码.zip
基础篇.zip基于vue编写的一些自定义bpmn.js案例-基础篇.zip基于vue编写的一些自定义bpmn.js案例-基础篇.zip基于vue编写的一些自定义bpmn.js案例-基础篇.zip基于vue编写的一些自定义bpmn.js案例-基础篇.zip基于vue...