Java 压缩文件夹工具类(包含解压)
依赖jar
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.18</version>
</dependency>
CompressUtils.java
package utils; 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.io.InputStream;
import java.io.OutputStream;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.Objects; import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.ArchiveInputStream;
import org.apache.commons.compress.archivers.ArchiveOutputStream;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.compress.utils.IOUtils; /**
* 压缩文件夹工具类
*
*/
public class CompressUtils { /**
* 压缩文件夹到指定zip文件
*
* @param srcDir 源文件夹
* @param targetFile 目标知道zip文件
* @throws IOException IO异常,抛出给调用者处理
*/
public static void zip(String srcDir, String targetFile) throws IOException { try (
OutputStream outputStream = new FileOutputStream(targetFile);
) {
zip(srcDir, outputStream);
}
} /**
* 压缩文件夹到指定输出流中,可以是本地文件输出流,也可以是web响应下载流
*
* @param srcDir 源文件夹
* @param outputStream 压缩后文件的输出流
* @throws IOException IO异常,抛出给调用者处理
*/
public static void zip(String srcDir, OutputStream outputStream) throws IOException {
try (
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
ArchiveOutputStream out = new ZipArchiveOutputStream(bufferedOutputStream);
) {
Path start = Paths.get(srcDir);
Files.walkFileTree(start, new SimpleFileVisitor<Path>() { @Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
ArchiveEntry entry = new ZipArchiveEntry(dir.toFile(), start.relativize(dir).toString());
out.putArchiveEntry(entry);
out.closeArchiveEntry();
return super.preVisitDirectory(dir, attrs);
} @Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
try (
InputStream input = new FileInputStream(file.toFile())
) {
ArchiveEntry entry = new ZipArchiveEntry(file.toFile(), start.relativize(file).toString());
out.putArchiveEntry(entry);
IOUtils.copy(input, out);
out.closeArchiveEntry();
}
return super.visitFile(file, attrs);
} }); }
} /**
* 解压zip文件到指定文件夹
*
* @param zipFileName 源zip文件路径
* @param destDir 解压后输出路径
* @throws IOException IO异常,抛出给调用者处理
*/
public static void unzip(String zipFileName, String destDir) throws IOException {
try (
InputStream inputStream = new FileInputStream(zipFileName);
) {
unzip(inputStream, destDir);
} } /**
* 从输入流中获取zip文件,并解压到指定文件夹
*
* @param inputStream zip文件输入流,可以是本地文件输入流,也可以是web请求上传流
* @param destDir 解压后输出路径
* @throws IOException IO异常,抛出给调用者处理
*/
public static void unzip(InputStream inputStream, String destDir) throws IOException {
try (
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
ArchiveInputStream in = new ZipArchiveInputStream(bufferedInputStream);
) {
ArchiveEntry entry = null;
while (Objects.nonNull(entry = in.getNextEntry())) {
if (in.canReadEntryData(entry)) {
File file = Paths.get(destDir, entry.getName()).toFile();
if (entry.isDirectory()) {
if (!file.exists()) {
file.mkdirs();
}
} else {
try (
OutputStream out = new FileOutputStream(file);
) {
IOUtils.copy(in, out);
}
}
} else {
System.out.println(entry.getName());
}
}
} } }
.
Java 压缩文件夹工具类(包含解压)的更多相关文章
- 文件夹工具类 - FolderUtils
文件夹工具类,提供创建完整路径的方法. 源码如下:(点击下载 -FolderUtils.java .commons-io-2.4.jar ) import java.io.File; import o ...
- 简单测试Demo:如何用Java压缩文件夹和文件
一.直接贴出测试代码 package com.jason.zip; import java.io.File; import java.io.FileInputStream; import java.i ...
- 删除文件夹工具类 DeleteFolder.java
package com.util; import java.io.File; /** * 删除文件夹 * @createTime DSC 20, 2010 15:38 * @version 2.0 * ...
- java将文件打包成ZIP压缩文件的工具类实例
package com.lanp; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...
- C#压缩文件夹至zip,不包含所选文件夹【转+修改】
转自园友:jimcsharp的博文C#实现Zip压缩解压实例[转] 在此基础上,对其中的压缩文件夹方法略作修正,并增加是否对父文件夹进行压缩的方法.(因为笔者有只压缩文件夹下的所有文件,却不想将选中的 ...
- Java操作文件夹的工具类
Java操作文件夹的工具类 import java.io.File; public class DeleteDirectory { /** * 删除单个文件 * @param fileName 要删除 ...
- 使用java API进行zip递归压缩文件夹以及解压
一.概述 在本篇文章中,给大家介绍一下如何将文件进行zip压缩以及如何对zip包解压.所有这些都是使用Java提供的核心库java.util.zip来实现的. 二.压缩文件 首先我们来学习一个简单的例 ...
- ZIP解压缩文件的工具类【支持多级文件夹|全】
ZIP解压缩文件的工具类[支持多级文件夹|全] 作者:Vashon 网上有非常多的加压缩演示样例代码.可是都仅仅是支持一级文件夹的操作.假设存在多级文件夹的话就不行了. 本解压缩工具类经过多次检查及重 ...
- C#利用SharpZipLib解压或压缩文件夹实例操作
最近要做一个项目涉及到C#中压缩与解压缩的问题的解决方法,大家分享. 这里主要解决文件夹包含文件夹的解压缩问题. )下载SharpZipLib.dll,在http://www.icsharpcode. ...
随机推荐
- pip安装python库
- firewall 端口转发
centos 7 使用背景:某次新购阿里云服务器安装nginx后配置80转8080的内部转发 systemctl status firewalld ---查看守护进程状态systemctl start ...
- my.宠物价格_资料
1.梦幻西游手游宠物估价五大实用技巧_72G梦幻西游手游专区.html http://www.72g.com/game/mhxysy/88470.html 梦幻西游手游宠物估价五大实用技巧 作者:升仙 ...
- javascrip基础学习
JS是一种解释性脚本语言,在网页开发用经常用到(HTML CSS),用于控制网页的行为.现在RTT的柿饼UI也是用JS来开发的,所以很有必要学习一下. 注释:// ./* */ 语句分行: 折行\ ...
- linux 访问 windows 共享文件夹
http://www.01happy.com/linux-access-windows-shares-folders/
- Spring Cloud学习笔记之微服务架构
目录 什么是微服务 架构优点 架构的挑战 设计原则 什么是微服务 微服务构架方法是以开发一种小型服务的方式,来开发一个独立的应用系统的. 其中每个小型服务都运行在自己的进程中,并经常采 ...
- container_of 和 offsetof 宏详解
在linux内核链表中,会遇到两个宏. 在include/linux/stddef.h中,有这样的定义 #define offsetof(TYPE, MEMBER) ((size_t) &(( ...
- GitKraken使用教程-基础部分(2)
3. 修改用户名 为了方便项目中代码的管理,需要重新编辑用户名. 点击右上角的图像即可看到如下图 3‑1所示的下拉菜单,鼠标悬于Profile上,会出现一个Edit按钮. 图 3‑1 编辑个人信息 点 ...
- Sql 本周当天本期日期转换
--查询当天: --查询24小时内的: --info为表名,datetime为数据库中的字段值 --查询当天: --查询24小时内的: select * from table where DateDi ...
- StreamWrite类
FileStream类,该对象只能以字节形式读取/写入数据,这就使得操作非常困难. 一般有了FileStream对象,都会借用StreamWrite对象或StreamReader对象的方法来处理文件. ...