0
点赞
收藏
分享

微信扫一扫

java压缩文件夹递归实现将多个文件夹压缩在同一个zip包


该方法递归实现将多个文件夹压缩在同一个zip包中 然后删除文件夹directoryName 下需要被压缩的文件。

package com.chuangqi.tools;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
* \* Created with IntelliJ IDEA.
* \* @author: xiyue
* \* Date: 2020/6/3
* \* Time: 14:53
* \* To change this template use File | Settings | File Templates.
* \* Description:
* \
*/
public class ZipUtils {


public static void zipDir(String directoryName, ZipOutputStream zos, String basePath) {

/**
* 该方法递归实现将多个文件夹压缩在同一个zip包中 然后删除文件夹directoryName 下需要被压缩的文件。
* @param directoryName 文件夹路径
* @param zos 压缩流 ZipOutputStream 确定压缩包生成的位置
* @param basePath 用于传给 ZipEntry 用于压缩包分文件夹第一级传入可以为""
* @throws IOException
*/

File file = new File(directoryName);
// 每一级别的递归 basePath 不应该被改变所以添加一个 参数 copyBasePath
String copyBasePath ="";
if (file.exists()) {
File[] fileList = file.listFiles();
for (File f : fileList) {
if (f.isDirectory()) {
// 拼接文件夹目录
if (!"".equals(basePath)) {
copyBasePath = basePath+ File.separator+f.getName();
} else {
copyBasePath = f.getName();
}
// 继续递归文件夹
zipDir(directoryName + File.separator + f.getName(), zos, copyBasePath);
//这里是生成空文件夹,加个斜杠/就行了
try {
zos.putNextEntry(new ZipEntry(copyBasePath+"/"));
} catch (IOException e) {
e.printStackTrace();
}
try {
zos.closeEntry();
} catch (IOException e) {
e.printStackTrace();
}
} else {
// 压缩单个文件到 zos
String zipName;
if (!"".equals(basePath)) {
zipName = basePath + File.separator + f.getName();
} else {
zipName = f.getName();
}
try {
// zos.putNextEntry 开始添加压缩文件 ZipEntry传入的参数 zipName如果包含了层级关系就会生成文件夹
zos.putNextEntry(new ZipEntry(zipName));
int len;
FileInputStream is = new FileInputStream(f);
byte[] bytes = new byte[1024];
while ((len = is.read(bytes)) != -1) {
zos.write(bytes, 0, len);
}
zos.flush();
// zos.closeEntry() 结束当前压缩文件的添加
zos.closeEntry();
is.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

}
}

}


举报

相关推荐

0 条评论