博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
压缩文档相关的工具类
阅读量:6481 次
发布时间:2019-06-23

本文共 2236 字,大约阅读时间需要 7 分钟。

package com.opslab.util;

import java.io.*;

import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

/**

* 压缩文档相关的工具类
*/
public final class ZIPUtil {
/**
* 文档压缩
*
* @param file 需要压缩的文件或目录
* @param dest 压缩后的文件名称
* @throws Exception
*/
public final static void deCompress(File file, String dest) throws Exception {
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(dest))) {
zipFile(file, zos, "");
} catch (IOException e) {
e.printStackTrace();
}
}

public final static void zipFile(File inFile, ZipOutputStream zos, String dir) throws IOException {

if (inFile.isDirectory()) {
File[] files = inFile.listFiles();
if (CheckUtil.valid(files)) {
for (File file : files) {
String name = inFile.getName();
if (!"".equals(dir)) {
name = dir + "/" + name;
}
zipFile(file, zos, name);
}
}
} else {
String entryName = null;
if (!"".equals(dir)) {
entryName = dir + "/" + inFile.getName();
} else {
entryName = inFile.getName();
}
ZipEntry entry = new ZipEntry(entryName);
zos.putNextEntry(entry);
try (InputStream is = new FileInputStream(inFile)) {
int len = 0;
while ((len = is.read()) != -1) {
zos.write(len);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

/**

* 文档解压
*
* @param source 需要解压缩的文档名称
* @param path 需要解压缩的路径
*/
public final static void unCompress(File source, String path) throws IOException {
ZipEntry zipEntry = null;
FileUtil.createPaths(path);
//实例化ZipFile,每一个zip压缩文件都可以表示为一个ZipFile
//实例化一个Zip压缩文件的ZipInputStream对象,可以利用该类的getNextEntry()方法依次拿到每一个ZipEntry对象
try (
ZipFile zipFile = new ZipFile(source);
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(source))
) {
while ((zipEntry = zipInputStream.getNextEntry()) != null) {
String fileName = zipEntry.getName();
File temp = new File(path + "/" + fileName);
if (!temp.getParentFile().exists()) {
temp.getParentFile().mkdirs();
}
try (OutputStream os = new FileOutputStream(temp);
//通过ZipFile的getInputStream方法拿到具体的ZipEntry的输入流
InputStream is = zipFile.getInputStream(zipEntry)) {
int len = 0;
while ((len = is.read()) != -1) {
os.write(len);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

转载于:https://www.cnblogs.com/chinaifae/p/10254898.html

你可能感兴趣的文章
Git服务端和客户端安装笔记
查看>>
Spring Security(14)——权限鉴定基础
查看>>
IntelliJ IDEA快捷键
查看>>
【iOS-cocos2d-X 游戏开发之十三】cocos2dx通过Jni调用Android的Java层代码(下)
查看>>
MongoDB的基础使用
查看>>
进程间通信——命名管道
查看>>
ssh登陆不需要密码
查看>>
java mkdir()和mkdirs()区别
查看>>
OSChina 周六乱弹 ——揭秘后羿怎么死的
查看>>
IT人员的职业生涯规划
查看>>
sorry,you must have a tty to run sudo
查看>>
ios开发中使用正则表达式识别处理字符串中的URL
查看>>
项目中的积累,及常见小问题
查看>>
Python类型转换、数值操作(收藏)
查看>>
oracle11g dataguard 安装手册(转)
查看>>
1. Two Sum - Easy - Leetcode解题报告
查看>>
多线程---同步函数的锁是this(转载)
查看>>
鱼C记事本V1.0(下)- 零基础入门学习Delphi28
查看>>
百练 2742 统计字符数 解题报告
查看>>
Ubuntu搜狗输入法候选词乱码
查看>>