将文件夹压缩成zip文件

news/2024/11/16 10:29:42/

一 代码

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;
import java.util.zip.ZipOutputStream;/**
* Copyright (C), 2020-2020, XXX有限公司
* FileName: ZipFile
* Author:   cakin
* Date:     2020/1/18
* Description: 将文件夹压缩成zip文件,该范例重点关注资源关闭的顺序
* 在开启了资源后,就要按照打开的顺序,依次相反地关闭资源。
*/
public class ZipFile {private static Logger log = LogManager.getLogger(ZipFile.class);public static void main( String[] args ) {String filePath = "F:\\Javatest" + File.separator + "tempTest"; // 代表一个文件夹String zipPath = "F:\\Javatest" + File.separator + "tempTest.zip"; // 代表一个压缩文件zipMutiFile(filePath, zipPath);}public static void zipMutiFile( String filePath, String zipPath ) {// 文件夹为空if (StringUtils.isEmpty(filePath)) {log.error("filePath is null");return;}// 文件名为空if (StringUtils.isEmpty(zipPath)) {log.error("zipPath is null");return;}InputStream input = null;File file = new File(filePath); // 要被压缩的文件夹File zipFile = new File(zipPath); // 压缩后的文件ZipOutputStream zipOut = null; // 该类实现了以ZIP文件格式写入文件的输出流过滤器。 包括对压缩和未压缩条目的支持。try {zipOut = new ZipOutputStream(FileUtils.openOutputStream(zipFile));   // 1 申请的资源if (file.isDirectory()) {File[] files = file.listFiles();if (files != null) {for (File tempFile : files) {input = FileUtils.openInputStream(tempFile);  // 2 如果是两个文件,会两次申请 FileInputStream 资源System.out.println(file.getName() + File.separator + tempFile.getName());// ZipEntry:表示zip文件条目   http://www.matools.com/api/java8// putNextEntry:开始编写新的ZIP文件条目,并将流定位到条目数据的开头。zipOut.putNextEntry(new ZipEntry(file.getName() + File.separator + tempFile.getName()));int temp;while ((temp = input.read()) != -1) {System.out.println(temp);// write将一个字节写入压缩的输出流。 该方法将阻塞直到该字节被写入。zipOut.write(temp);}// 要对每一个input都close()// 这里不用判断input是否为空,因为openInputStream要么抛出一个异常,要么返回一个实例try {System.out.println("关闭2处的FileInputStream资源");input.close();input = null;} catch (IOException e) {e.printStackTrace();}}}}} catch (Exception e) {e.printStackTrace();} finally {try {if (input != null) {System.out.println("这个地方是保护关闭2处的FileInputStream资源,一般不会走到这里");input.close();}} catch (Exception e) {e.printStackTrace();} finally {if (zipOut != null) {try {zipOut.close();System.out.println("关闭1处的zipOut资源");} catch (IOException e) {e.printStackTrace();}}}}}
}

二 准备两个文件,内容如下

三 测试结果

tempTest\1.txt
49
50
51
52
53
54
55
56
57
关闭2处的FileInputStream资源
tempTest\2.txt
97
98
99
100
101
102
103
关闭2处的FileInputStream资源
关闭1处的zipOut资源

四 说明

在开启了资源后,就要按照打开的顺序,依次相反地关闭资源。

 


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

相关文章

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

实例:压缩服务器上当前目录的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前目录 unzip filename.zip 另:有些服务器没有安装zip包执行不了zip命令,但基本上都可以用tar命令的,实例如下: 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…

如何将文件夹压缩为zip格式

需求&#xff1a;需要压缩一个文件夹&#xff0c;文件夹下有不同文件&#xff0c;其中有一部分不需要压缩。 方法一&#xff1a;目录格式按照之前文件夹格式压缩 package cn.com.vsai.knowledge.graphlabel.service;import java.io.*; import java.util.ArrayList; import ja…

tar 压缩文件夹到指定的目录

tar -cvzf /dev/tmp/erp_exp.tar.gz /tools/erp_exp /dev/tmp/erp_exp.tar.gz 为指定目录的压缩文件 /tools/erp_exp 为要压缩的文件夹

Java 压缩文件夹

本文只针对压缩文件夹(不用于压缩文件&#xff0c;若需要&#xff0c;自行更改) public class ZipTool {File f0; //被压缩的目标File f1; //压缩后的目录及文件名public ZipTool(File f0, File f1) {this.f0 f0;this.f1 f1;start();}public void start() {try (ZipOutput…

Python —— 压缩文件夹

Python —— 压缩文件夹 目标&#xff1a;压缩指定文件夹为zip文件 适用场景&#xff1a;批处理文件&#xff0c;定时打包并发送至指定用户邮箱 python脚本如下&#xff1a; #!/usr/bin/env python # -*- coding:utf-8 -*-""" Author :xxxxx Contact :122…