Java操作zip压缩和解压缩文件工具类
来源:互联网 发布:jquery ajax 遍历json 编辑:程序博客网 时间:2024/05/01 14:39
package com.zhihua.file;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.ArrayList;import java.util.Enumeration;import java.util.List;import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipFile;import org.apache.tools.zip.ZipOutputStream;/** * Java操作zip压缩和解压缩文件工具类 * 由于直接使用java.util.zip工具包下的类,会出现中文乱码问题,所以使用ant.jar中的org.apache.tools.zip下的工具类 * <请替换成功能描述> <br> * <请替换成详细描述> * @author caizh * @since [1.0.0] * @version [1.0.0,2017年2月6日] */public class ZipUtils { private static byte[] _byte = new byte[1024]; /** * 对.zip文件进行解压 * <请替换成功能描述> <br> * <请替换成详细描述> * @param zipFile 解压缩文件 * @param targetPath 压缩的目标地址 * @return * @author caizh * @since [1.0.0] * @version [1.0.0,2017年2月6日] */ @SuppressWarnings("rawtypes") public static List<File> decompressionZipFile(File zipFile,String targetPath){ List<File> list = new ArrayList<File>(); try{ ZipFile _zipFile = new ZipFile(zipFile,"GBK"); for(Enumeration entries = _zipFile.getEntries();entries.hasMoreElements();){ ZipEntry entry = (ZipEntry) entries.nextElement(); File _file = new File(targetPath+File.separator+entry.getName()); if(entry.isDirectory()){ _file.mkdirs(); }else{ File _parent = _file.getParentFile(); if(!_parent.exists()){ _parent.mkdirs(); } InputStream _in = _zipFile.getInputStream(entry); OutputStream _out = new FileOutputStream(_file); int len = 0; while((len=_in.read(_byte))>0){ _out.write(_byte, 0, len); } _in.close(); _out.flush(); _out.close(); list.add(_file); } } }catch(Exception e){ e.printStackTrace(); } return list; } /** * 压缩zip文件 * <请替换成功能描述> <br> * <请替换成详细描述> * @param targetPath 压缩的目的地址 如:E:/xxx.zip * @param sourceFiles 压缩的源文件 * @author caizh * @since [1.0.0] * @version [1.0.0,2017年2月6日] */ public static void compressZipFile(String targetPath,List<File> sourceFiles){ try{ if(targetPath.endsWith(".zip")|| targetPath.endsWith(".ZIP")){ ZipOutputStream zipOutStream = new ZipOutputStream(new FileOutputStream(new File(targetPath))); zipOutStream.setEncoding("GBK"); for (File file : sourceFiles) { addSourceFile(targetPath, zipOutStream, file, ""); } zipOutStream.close(); }else{ System.out.println("target file["+targetPath+"] is not .zip type file"); } }catch(Exception e){ e.printStackTrace(); } } /** * 压缩文件 注:如果压缩文件是一个文件夹,那压缩包存放的位置不能在该文件夹下 * <请替换成功能描述> <br> * <请替换成详细描述> * @param targetPath 压缩的目的地址 * @param zipOutStream * @param sourceFile 被压缩的文件 * @param path 在zip中的相对路径 * @author caizh * @since [1.0.0] * @version [1.0.0,2017年2月6日] * @throws IOException */ private static void addSourceFile(String targetPath,ZipOutputStream zipOutStream,File sourceFile,String path) throws IOException{ System.out.println("begin to compression file["+sourceFile.getName()+"]"); if(!"".equals(path) && !path.endsWith(File.separator)){ path += File.separator; } if(!sourceFile.getPath().equals(targetPath)){ if(sourceFile.isDirectory()){ File[] files = sourceFile.listFiles(); if(files.length==0){ zipOutStream.putNextEntry(new ZipEntry(path+sourceFile.getName()+File.separator)); zipOutStream.closeEntry(); }else{ for(File f:files){ addSourceFile(targetPath, zipOutStream, f, path+sourceFile.getName()); } } }else{ InputStream in = new FileInputStream(sourceFile); zipOutStream.putNextEntry(new ZipEntry(path+sourceFile.getName())); int len = 0; while((len=in.read(_byte))>0){ zipOutStream.write(_byte,0,len); } in.close(); zipOutStream.closeEntry(); } } }}
测试类:
package com.zhihua.file.test;import java.io.File;import java.util.ArrayList;import java.util.List;import org.junit.Test;import com.zhihua.file.ZipUtils;public class ZipUtilsTest { /** * 解压文件 * <请替换成功能描述> <br> * <请替换成详细描述> * @author caizh * @since [1.0.0] * @version [1.0.0,2017年2月6日] */ @Test public void decompressionZipFile(){ String zipPath = "E:/mkdir/copy/test.zip"; File zipFile = new File(zipPath); String targetPath = "E:/mkdir/zip/"; ZipUtils.decompressionZipFile(zipFile, targetPath); } /** * 压缩文件 * <请替换成功能描述> <br> * <请替换成详细描述> * @author caizh * @since [1.0.0] * @version [1.0.0,2017年2月6日] */ @Test public void compressZipFile(){ File f1 = new File("E:/mkdir/copy/free.ftl"); File f2 = new File("E:/mkdir/del/login.wav"); List<File> list = new ArrayList<File>(); list.add(f1); list.add(f2); String targetPath = "E:/mkdir/del/compress.zip"; ZipUtils.compressZipFile(targetPath, list); }}
0 0
- Java操作zip压缩和解压缩文件工具类
- Java操作zip压缩和解压缩文件工具类
- 【Java】IO操作之使用zip包压缩和解压缩文件
- Java用ZIP格式压缩和解压缩文件
- IO操作之使用zip包压缩和解压缩文件
- 使用java.util.zip包压缩和解压缩文件
- Java ZIP压缩和解压缩文件(解决中文文件名乱码问题)
- 使用java.util.zip包压缩和解压缩文件
- Linux中巧用zip命令压缩和解压缩文件
- PHP实现zip压缩和解压缩操作
- Delphi XE2 新增 System.Zip 单元,压缩和解压缩文件
- java 压缩文件,文件夹,和解压缩文件夹
- Java使用winrar压缩和解压缩文件
- java实现zip压缩和解压缩 源码
- Java zip/gzip文件压缩和解压缩
- Java zip/gzip文件压缩和解压缩
- Java压缩文件和解压缩文件
- 压缩和解压缩文件
- 连接数据库的Provider、Driver等字符串的写法
- PHP实现执行定时任务的几种思路详解
- 【LeetCode】Longest Word in Dictionary through Deleting 解题报告
- CMake编程(二)
- CMake学习(一)
- Java操作zip压缩和解压缩文件工具类
- laravel中关闭CSRF的方法
- 测试覆盖
- 关闭水狐浏览器缓存设置
- 笔记
- C++第三次上机作业
- 2017华为软件精英挑战赛小结
- poj 3463 统计次短路条数+最短路条数
- c++作业3