文件与文件夹压缩成zip包

news/2024/11/16 9:44:06/

文件与文件夹的压缩,其实本质上都是文件的压缩,只是文件夹在压缩时,要判断是否为文件夹,以及文件夹下是否有文件;而同时要处理空文件夹,即空文件夹是否要压缩进zip包中。

file.isDirectory():返回值为Boolean,true代表当前文件是文件夹;

file.listFiles():返回值为file类型的数组,存储的是file;使用该方法可以判断文件夹下是否还有内容(包括文件、文件夹),即用来判断是否为空文件夹;

当是一个文件时,调用ZipOutputStream输出流;

最后不要忘记关闭BufferedInputStream;

直接上代码: 

import java.io.*;
import java.util.List;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;/*** @Description 将文件或文件夹生成压缩包* @Version V1.0**/public class GenerateZipUtil {static final int BUFFER = 8192;private File zipFile;public GenerateZipUtil(String pathName) {zipFile = new File(pathName);}/*** 多个文件夹* @param pathName  文件路径的集合*/public void compress(List pathName) {ZipOutputStream out = null;try {FileOutputStream fileOutputStream = new FileOutputStream(zipFile);CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream, new CRC32());out = new ZipOutputStream(cos);String basedir = "";for (int i = 0; i < pathName.size(); i++) {compress(new File((String) pathName.get(i)), out, basedir);}out.close();} catch (Exception e) {throw new RuntimeException(e);}}/*** 单个文件(夹)的压缩* @param srcPathName 文件路径*/public void compress(String srcPathName) {File file = new File(srcPathName);if (!file.exists())throw new RuntimeException("要压缩的文件:" + srcPathName + "不存在!");try {FileOutputStream fileOutputStream = new FileOutputStream(zipFile);CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream, new CRC32());ZipOutputStream out = new ZipOutputStream(cos);String basedir = "";compress(file, out, basedir);out.close();} catch (Exception e) {throw new RuntimeException(e);}}/*** 压缩文件(夹)* @param file 文件/文件夹* @param out 压缩包输出流* @param basedir 根文件路径*/private void compress(File file, ZipOutputStream out, String basedir) {// 判断是目录还是文件if (file.isDirectory()) {this.compressDirectory(file, out, basedir);} else {this.compressFile(file, out, basedir);}}/*** 压缩一个目录,文件夹* @param dir 文件夹* @param out 输出流* @param basedir 根路径*/private void compressDirectory(File dir, ZipOutputStream out, String basedir) {if (!dir.exists())return;try {File[] files = dir.listFiles();if (files.length == 0) {// 空文件夹的处理,空目录也打包进去,加上/表示是一个目录out.putNextEntry(new ZipEntry(basedir + dir.getName() + "/"));out.closeEntry();} else {for (int i = 0; i < files.length; i++) {/* 递归 */compress(files[i], out, basedir + dir.getName() + "/");}}} catch (Exception e) {e.printStackTrace();}}/*** 压缩一个文件* @param file 文件* @param out 输出流* @param basedir 根路径*/private void compressFile(File file, ZipOutputStream out, String basedir) {if (!file.exists()) {return;}try {BufferedInputStream bis = new BufferedInputStream( new FileInputStream(file));ZipEntry entry = new ZipEntry(basedir + file.getName());out.putNextEntry(entry);int count;byte data[] = new byte[BUFFER];while ((count = bis.read(data, 0, BUFFER)) != -1) {out.write(data, 0, count);}bis.close();} catch (Exception e) {throw new RuntimeException(e);}}}


http://www.ppmy.cn/news/696600.html

相关文章

【python】批量压缩文件夹

文章目录 下载场景使用思路代码 下载 百度云 提取码&#xff1a;cyyy 链接&#xff1a;https://pan.baidu.com/s/1-RNZoS9hUvNodQZhF26hXA?pwdcyyy 提取码&#xff1a;cyyy 场景 昨天是北湖的活动&#xff0c;他们拍了很多照片&#xff0c;今天我要把一大堆图片分类&#xff…

linux压缩解压缩文件夹或文件命令详解

一、压缩当前目录下的文件夹或者文件app到app.tar tar -cvf app.tar app二、解压缩当前目录下的压缩包app.tar到app tar -xvf app.tar三、不解压的情况下查看压缩包里的内容 tar -tf app.tar四、参数详解 1、必选参数&#xff1a;-f: 使用档案名字&#xff0c;这个参数是最…

File对文件夹、文件进行压缩

对文件夹或者文件进行压缩工具类 import javax.servlet.http.HttpServletResponse; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.util.zip.ZipEntry; import java.util.zip…

将文件夹压缩成zip文件

一 代码 package ZipFile;import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import java.io.InputStream; import java.io.*; import java.util.zip.ZipEntry; im…

Linux下的zip压缩解压缩文件夹

实例&#xff1a;压缩服务器上当前目录的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前目录 unzip filename.zip 另&#xff1a;有些服务器没有安装zip包执行不了zip命令&#xff0c;但基本上都可以用tar命令的&#xff0c;实例如下&#xff1a; tar -zcvf /home/z…

使用python压缩文件夹

python中有专业的库对文件夹进行压缩 zipfile 压缩zip文件 tarfile 压缩tar文件 在windows上的压缩文件格式多为rar,这种类型没有专门的库,如果使用python操作的话,可以编码调用命令行工具,执行Windows上的压缩命令; zipfile zipfile 是python的一个内置模块,专门用于压缩…

zip 压缩文件夹

43.ZIP压缩文件夹 //www.zlib.net /* #include <stdio.h> #include <string.h> #include <assert.h> #include <dos.h> #include <direct.h> #include <zlib.h> #if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYG…

如何压缩文件

java压缩文件及文件夹中的所有文件&#xff08;一&#xff09;资料收藏 2008-05-28 23:23:12 阅读261 评论0 字号&#xff1a;大中小 import java.io.File;import org.apache.tools.zip.ZipOutputStream; //这个包在ant.jar里&#xff0c;要到官方网下载import java.io.FileInp…