Java压缩和解压文件工具类ZipUtil
2016-08-18 10:45
543 查看
</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
相关文章推荐
- Java压缩和解压文件工具类ZipUtil
- Java压缩和解压文件工具类ZipUtil
- java对zip格式的文件压缩解压工具类
- -Java压缩解压文件、文件夹的一个工具类
- java实现将ZIP压缩文件解压的工具类
- java文件压缩、解压工具类
- java实现将ZIP压缩文件解压的工具类
- Java压缩和解压文件工具类ZipUtil
- java解压缩zip文件,java创建zip文件,java压缩文件,java解压文件,用到ant.jar解决汉字乱码
- java 压缩、解压文件、文件夹。
- java解压缩zip文件,java创建zip文件,java压缩文件,java解压文件,用到ant.jar解决汉字乱码
- 一个撇脚的java压缩文件工具类
- java.util.zip包无法正常解压rar软件压缩的rar文件
- java 压缩解压文件
- java将文件打包成ZIP压缩文件的工具类实例
- java实现zip文件压缩,解压
- Java压缩解压文件/文件夹
- 使用java.util.zip压缩、解压文件
- java解压缩zip文件,java创建zip文件,java压缩文件,java解压文件,用到ant.jar解决汉字乱码
- Java文件解压与压缩