Java压缩和解压文件工具类ZipUtil
来源:互联网 发布:淘宝外围女孙佑怡 编辑:程序博客网 时间:2024/05/17 18:28
</pre><pre code_snippet_id="1837335" snippet_file_name="blog_20160818_2_1853501" name="code" class="java">packagecom.utility.zip; importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.util.zip.ZipEntry;importjava.util.zip.ZipInputStream;importjava.util.zip.ZipOutputStream; importcom.utility.io.IOUtil; /** * 通过Java的Zip输入输出流实现压缩和解压文件 * * @author liujiduo * */publicfinal class ZipUtil { privateZipUtil() { // empty } /** * 压缩文件 * * @param filePath * 待压缩的文件路径 * @return 压缩后的文件 */ publicstatic File zip(String filePath) { File target = null; File source = newFile(filePath); if(source.exists()) { // 压缩文件名=源文件名.zip String zipName = source.getName() + ".zip"; target = newFile(source.getParent(), zipName); if(target.exists()) { target.delete();// 删除旧的文件 } FileOutputStream fos = null; ZipOutputStream zos = null; try{ fos = newFileOutputStream(target); zos = newZipOutputStream(newBufferedOutputStream(fos)); // 添加对应的文件Entry addEntry("/", source, zos); }catch(IOException e) { thrownew RuntimeException(e); }finally{ IOUtil.closeQuietly(zos, fos); } } returntarget; } /** * 扫描添加文件Entry * * @param base * 基路径 * * @param source * 源文件 * @param zos * Zip文件输出流 * @throws IOException */ privatestatic void addEntry(String base, File source, ZipOutputStream zos) throwsIOException { // 按目录分级,形如:/aaa/bbb.txt String entry = base + source.getName(); if(source.isDirectory()) { for(File file : source.listFiles()) { // 递归列出目录下的所有文件,添加文件Entry addEntry(entry + "/", file, zos); } }else{ FileInputStream fis = null; BufferedInputStream bis = null; try{ byte[] buffer = newbyte[1024* 10]; fis = newFileInputStream(source); bis = newBufferedInputStream(fis, buffer.length); intread = 0; zos.putNextEntry(newZipEntry(entry)); while((read = bis.read(buffer, 0, buffer.length)) != -1) { zos.write(buffer,0, read); } zos.closeEntry(); }finally{ IOUtil.closeQuietly(bis, fis); } } } /** * 解压文件 * * @param filePath * 压缩文件路径 */ publicstatic void unzip(String filePath) { File source = newFile(filePath); if(source.exists()) { ZipInputStream zis = null; BufferedOutputStream bos = null; try{ zis = newZipInputStream(newFileInputStream(source)); ZipEntry entry = null; while((entry = zis.getNextEntry()) != null && !entry.isDirectory()) { File target = newFile(source.getParent(), entry.getName()); if(!target.getParentFile().exists()) { // 创建文件父目录 target.getParentFile().mkdirs(); } // 写入文件 bos = newBufferedOutputStream(newFileOutputStream(target)); intread = 0; byte[] buffer = newbyte[1024* 10]; while((read = zis.read(buffer, 0, buffer.length)) != -1) { bos.write(buffer,0, read); } bos.flush(); } zis.closeEntry(); }catch(IOException e) { thrownew RuntimeException(e); }finally{ IOUtil.closeQuietly(zis, bos); } } } publicstatic void main(String[] args) { String targetPath = "E:\\Win7壁纸"; File file = ZipUtil.zip(targetPath); System.out.println(file); ZipUtil.unzip("F:\\Win7壁纸.zip"); }}packagecom.utility.io; importjava.io.Closeable;importjava.io.IOException; /** * IO流工具类 * * @author liujiduo * */publicclass IOUtil { /** * 关闭一个或多个流对象 * * @param closeables * 可关闭的流对象列表 * @throws IOException */ publicstatic void close(Closeable... closeables) throwsIOException { if(closeables != null) { for(Closeable closeable : closeables) { if(closeable != null) { closeable.close(); } } } } /** * 关闭一个或多个流对象 * * @param closeables * 可关闭的流对象列表 */ publicstatic void closeQuietly(Closeable... closeables) { try{ close(closeables); }catch(IOException e) { // do nothing } } }
用于服务器端打包文件的,将压缩后的文件写入到response输出流即可实现在服务器端打包下载,支持多级目录嵌套。
测试时可以先用ZipUtil.zip压缩某个文件夹test,得到压缩文件test.zip,然后将文件夹test删除,用ZipUtil.unzip解压test.zip即可还原。
PS:需要解决中文乱码的朋友可以参考此处 http://log-cd.iteye.com/blog/585647
0 0
- Java压缩和解压文件工具类ZipUtil
- Java压缩和解压文件工具类ZipUtil
- Java压缩和解压文件工具类ZipUtil
- Java压缩和解压文件工具类ZipUtil
- Java压缩和解压文件工具类ZipUtil
- Java压缩和解压文件工具类ZipUtil
- ZipUtil压缩解压工具类——java
- Java-ZipUtil工具类
- Java-ZipUtil工具类
- 文件的压缩和解压(java工具类)
- java文件压缩、解压工具类
- Gzip压缩和解压文件工具类
- 压缩、解压文件工具类
- 压缩、解压文件工具类
- java压缩和解压文件
- java压缩解压工具类
- -Java压缩解压文件、文件夹的一个工具类
- java对zip格式的文件压缩解压工具类
- 关系数据库是如何工作的
- JavaScript window、location对象基础知识整理
- android Notification 入门
- JSON.NET 简单的使用
- Glide-Target
- Java压缩和解压文件工具类ZipUtil
- CheckIO 中位数
- 在VS2013中运行程序时如何传递实参
- Git版本控制学习与使用一
- Hellow
- json(http://www.asp.net/whitepapers/request-validation)
- window GIT GUI 保存账号密码 不用每次请求都输入
- 2016/08/16
- 一次azkaban源码阅读经历