java网络编程____zip操作工具类
来源:互联网 发布:安卓远程录音源码 编辑:程序博客网 时间:2024/06/07 03:19
package com.unzip.test;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.util.zip.ZipEntry;import java.util.zip.ZipInputStream;import java.util.zip.ZipOutputStream; /** * 通过Java的Zip输入输出流实现压缩和解压文件 * @author liujiduo */public final class ZipUtil { /** * 压缩文件 * @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 { IOUtil.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 { IOUtil.closeQuietly(bis, fis); } } } /** * 解压文件 * * @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 { IOUtil.closeQuietly(zis, bos); } } } public static void main(String[] args) { String targetPath = "F:\\beauty"; File file = ZipUtil.zip(targetPath); System.out.println(file); ZipUtil.unzip("F:\\beauty.zip"); }}
//
package com.unzip.test;import java.io.Closeable;import java.io.IOException;/** * IO流工具类 * * @author liujiduo * */public class IOUtil {/** * 关闭一个或多个流对象 * * @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}}}//运行结果
0 0
- java网络编程____zip操作工具类
- java网络编程____httpclient工具类操作
- java网络编程____ftp工具类操作
- java网络编程工具-URLConnection
- Java网络编程之URLEncode和URLDecode工具类
- java笔记-网络编程-实例操作
- 赵雅智_Android_网络操作工具类
- 使用WebService进行网络编程【工具类】
- C#网络编程之HTTP工具类
- 网络编程工具收集
- Java 文件操作工具类
- java JSON 操作 工具类
- java文件操作工具类
- java file操作工具类
- java操作文件工具类
- java操作json工具类
- 【java工具类】字节操作
- java 时间操作工具类
- SVN文件误删,再检出报红色X号
- Java 集合框架
- React 避免重渲染
- trait与policy模板技术
- Linux中服务器软件为什么需要编译安装
- java网络编程____zip操作工具类
- jenkins 配置备份
- 使用Audio API设计绚丽的HTML5音乐播放器
- 用代码画UML类图快餐教程
- EditText禁止点击之后弹出键盘
- Python网络爬虫与信息提取 网络爬虫之规则
- Android Studio 更新 gradle 一直在build的解决方案
- 离线系统表单设计
- 深入理解计算机系统--处理器体系结构