Java 将文件,文件夹打入压缩包zip,rar
Posted GW_Cheng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 将文件,文件夹打入压缩包zip,rar相关的知识,希望对你有一定的参考价值。
批量下载经常会有将文件打包下载的需求,比如批量下载图片
今天就分享一个java将文件夹中的所有文件(包括文件夹,递归)打包成压缩包(支持rar和zip)
先看效果,测试目录
李四文件夹下有文件夹和,文件和一个空文件夹(空文件夹打包到压缩包显示图标和类型都有点问题,这个还没找的解决方案,可以不打进去
)
压缩包截图(打包空目录)
不打包空目录(rar)
依赖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.ArrayUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipUtil
public static void main(String[] args) throws Exception
String dir = "E:\\\\zip";
String zip = "E:\\\\target.zip";
String rar = "E:\\\\target.rar";
zip(dir, zip);
zip(dir, rar, true);
/**
* 打包
*
* @param dir 要打包的目录
* @param zipFile 打包后的文件路径
* @throws Exception
*/
public static void zip(String dir, String zipFile) throws Exception
zip(dir, zipFile, false);
/**
* 打包
*
* @param dir 要打包的目录
* @param zipFile 打包后的文件路径
* @param includeBaseDir 是否包括最外层目录
* @throws Exception
*/
public static void zip(String dir, String zipFile, boolean includeBaseDir) throws Exception
if (zipFile.startsWith(dir))
throw new RuntimeException("打包生成的文件不能在打包目录中");
try (ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFile)))
File fileDir = new File(dir);
String baseDir = "";
if (includeBaseDir)
baseDir = fileDir.getName();
compress(out, fileDir, baseDir);
public static void compress(ZipOutputStream out, File sourceFile, String base) throws Exception
if (sourceFile.isDirectory())
base = base.length() == 0 ? "" : base + File.separator;
File[] files = sourceFile.listFiles();
if (ArrayUtils.isEmpty(files))
// todo 打包空目录
// out.putNextEntry(new ZipEntry(base));
return;
for (File file : files)
compress(out, file, base + file.getName());
else
out.putNextEntry(new ZipEntry(base));
try (FileInputStream in = new FileInputStream(sourceFile))
IOUtils.copy(in, out);
catch (Exception e)
throw new RuntimeException("打包异常: " + e.getMessage());
参考文献
https://www.cnblogs.com/tobiasy/p/8258419.html
以上是关于Java 将文件,文件夹打入压缩包zip,rar的主要内容,如果未能解决你的问题,请参考以下文章
Java能否对压缩文件进行操作,例如:对zip,rar,tar等文件进行复制。
Java上传pdf文件,只压缩大小,不改变成.zip/.rar文件