ZipUtils 工具类 - Java
2016-12-02 00:00
489 查看
import java.io.Closeable; import java.io.IOException; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; /** * 通过Java的Zip输入输出流实现压缩和解压文件 */ public final class ZipUtils { /** * 压缩文件 * @param filePath 待压缩的文件路径 * @return 压缩后的文件 */ public static File zip(String filePath) { File target = null; File source = new File(filePath); if (source.exists()) { // 压缩文件名=源文件名.zip String zipName = source.getName() + ".zip"; target = new File(source.getParent(), zipName); if (target.exists()) { target.delete(); // 删除旧的文件 } FileOutputStream fos = null; ZipOutputStream zos = null; try { fos = new FileOutputStream(target); zos = new ZipOutputStream(new BufferedOutputStream(fos)); // 添加对应的文件Entry addEntry("/", source, zos); } catch (IOException e) { throw new RuntimeException(e); } finally { closeQuietly(zos, fos); } } return target; } /** * 扫描添加文件Entry * @param base 基路径 * @param source 源文件 * @param zos Zip文件输出流 * @throws IOException */ private static void addEntry(String base, File source, ZipOutputStream zos) throws IOException { // 按目录分级,形如:/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 = new byte[1024 * 10]; fis = new FileInputStream(source); bis = new BufferedInputStream(fis, buffer.length); int read = 0; zos.putNextEntry(new ZipEntry(entry)); while ((read = bis.read(buffer, 0, buffer.length)) != -1) { zos.write(buffer, 0, read); } zos.closeEntry(); } finally { closeQuietly(bis, fis); } } } /** * 关闭一个或多个流对象 * * @param closeables * 可关闭的流对象列表 * @throws IOException */ public static void close(Closeable... closeables) throws IOException { if (closeables != null) { for (Closeable closeable : closeables) { if (closeable != null) { closeable.close(); } } } } /** * 关闭一个或多个流对象 * * @param closeables * 可关闭的流对象列表 */ public static void closeQuietly(Closeable... closeables) { try { close(closeables); } catch (IOException e) { // do nothing } } /** * 解压文件 * @param filePath 压缩文件路径 */ public static void unzip(String filePath) { File source = new File(filePath); if (source.exists()) { ZipInputStream zis = null; BufferedOutputStream bos = null; try { zis = new ZipInputStream(new FileInputStream(source)); ZipEntry entry = null; while ((entry = zis.getNextEntry()) != null && !entry.isDirectory()) { File target = new File(source.getParent(), entry.getName()); if (!target.getParentFile().exists()) { // 创建文件父目录 target.getParentFile().mkdirs(); } // 写入文件 bos = new BufferedOutputStream(new FileOutputStream(target)); int read = 0; byte[] buffer = new byte[1024 * 10]; while ((read = zis.read(buffer, 0, buffer.length)) != -1) { bos.write(buffer, 0, read); } bos.flush(); } zis.closeEntry(); } catch (IOException e) { throw new RuntimeException(e); } finally { closeQuietly(zis, bos); } } } /** * 解压文件 * @param filePath 压缩文件路径 * @param targetPath 目标目录 */ public static void unzip(String filePath,String targetPath) { File source = new File(filePath); if (source.exists()) { ZipInputStream zis = null; BufferedOutputStream bos = null; try { zis = new ZipInputStream(new FileInputStream(source)); ZipEntry entry = null; File f = new File(targetPath); if(!f.exists()){ f.mkdirs(); }else{ clearFiles(targetPath); f.mkdirs(); } while ((entry = zis.getNextEntry()) != null && !entry.isDirectory()) { File target = new File(f, entry.getName()); if (!target.getParentFile().exists()) { // 创建文件父目录 target.getParentFile().mkdirs(); } // 写入文件 bos = new BufferedOutputStream(new FileOutputStream(target)); int read = 0; byte[] buffer = new byte[1024 * 10]; while ((read = zis.read(buffer, 0, buffer.length)) != -1) { bos.write(buffer, 0, read); } bos.flush(); } zis.closeEntry(); } catch (IOException e) { throw new RuntimeException(e); } finally { closeQuietly(zis, bos); } } } //删除文件和目录 private static void clearFiles(String path){ File file = new File(path); if(file.exists()){ deleteFile(file); } } private static void deleteFile(File file){ if(file.isDirectory()){ File[] files = file.listFiles(); for(int i=0; i<files.length; i++){ deleteFile(files[i]); } } file.delete(); } }
相关文章推荐
- 压缩工具类 - ZipUtils.java
- java语言 ant.jar zip打包 utils工具类 通用性强
- 压缩工具类 - ZipUtils.java
- java将文件打包成ZIP压缩文件的工具类实例
- java开发_org.apache.commons.lang.StringUtils工具类源码
- Java日期处理工具类DateUtils
- hibernate 配置文件 和一个 id生成类BaseEntity.java 和一个hibernate工具类 HibernatUtils.java
- java将文件打包成ZIP压缩文件的工具类实例
- NO.63 [file]IO常用工具类IOUtils(Java读文件、写文件、打Zip包)
- java常用utils工具类
- java中常用的工具类(二)FtpUtil, 汉字转拼音,zip工具类,CollectionUtil,MathUtil,
- java实现将ZIP压缩文件解压的工具类
- 07_数据库创建,添加c3p0操作所需的jar包,编写c3p0-config.xml文件,编写User.java,编写jdbcUtils.java实现操作数据库的模板工具类,UserDao编写,Dao
- 用java解压缩zip和rar的工具类
- Java工具类——常用正则表达式工具RegexpUtils
- ADF工具类:TaskFlowUtils.java 源代码
- java实现将ZIP压缩文件解压的工具类
- java zip工具类
- java将文件打包成ZIP压缩文件的工具类实例
- Java常用正则表达式验证工具类RegexUtils.java