Java打成压缩包的方法汇总
文章目录
- 1.将指定目录下的文件打包成 .zip
- 2.将指定目录下的文件打包成 .tar.gz
- 3.将指定目录下的文件打包成 .tar
- 4.将指定目录下的文件打包成 .rar
- 5.生成若干个txt并打包到zip中
1.将指定目录下的文件打包成 .zip
代码示例:
import java.io.*;
import java.util.zip.*;public class ZipFiles {public static void main(String[] args) {// 要压缩的文件或文件夹String sourceFile = "path/to/your/source/file_or_folder";// 压缩后的ZIP文件名String zipFileName = "output.zip";// 创建一个输出流将数据写入ZIP文件try (FileOutputStream fos = new FileOutputStream(zipFileName);ZipOutputStream zos = new ZipOutputStream(fos)) {// 调用递归方法压缩文件或文件夹addToZipFile(sourceFile, sourceFile, zos);System.out.println("文件已成功打包成 " + zipFileName);} catch (IOException e) {e.printStackTrace();}}private static void addToZipFile(String path, String sourceFile, ZipOutputStream zos) throws IOException {File file = new File(sourceFile);// 如果是文件夹,则获取其内容并递归调用此方法if (file.isDirectory()) {String[] fileList = file.list();if (fileList != null) {for (String fileName : fileList) {addToZipFile(path, sourceFile + File.separator + fileName, zos);}}return;}// 如果是文件,则将其添加到ZIP文件中try (FileInputStream fis = new FileInputStream(sourceFile)) {String entryName = sourceFile.substring(path.length() + 1); // 获取ZIP中的条目名称ZipEntry zipEntry = new ZipEntry(entryName);zos.putNextEntry(zipEntry);byte[] bytes = new byte[1024];int length;while ((length = fis.read(bytes)) >= 0) {zos.write(bytes, 0, length);}}}
}
将 path/to/your/source/file_or_folder
替换为要打包的文件或文件夹的路径,然后运行该代码。它将创建一个名为 output.zip
的ZIP文件,其中包含指定路径下的文件或文件夹。
2.将指定目录下的文件打包成 .tar.gz
可以使用 Java 中的 java.util.zip
包来创建 .tar.gz
文件。尽管 Java 的标准库没有直接提供对 .tar
格式的支持,但你可以使用 TarArchiveOutputStream
以及 GzipCompressorOutputStream
来创建 tar.gz
归档文件。以下是一个示例:
import org.apache.commons.compress.archivers.tar.*;
import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream;import java.io.*;public class TarGzFiles {public static void main(String[] args) {// 要压缩的文件或文件夹String sourceFile = "path/to/your/source/file_or_folder";// 压缩后的tar.gz文件名String tarGzFileName = "output.tar.gz";try {FileOutputStream fos = new FileOutputStream(tarGzFileName);BufferedOutputStream bos = new BufferedOutputStream(fos);GzipCompressorOutputStream gzos = new GzipCompressorOutputStream(bos);TarArchiveOutputStream tarArchive = new TarArchiveOutputStream(gzos);File file = new File(sourceFile);addToTarArchive(file, tarArchive);tarArchive.finish();tarArchive.close();System.out.println("文件已成功打包成 " + tarGzFileName);} catch (IOException e) {e.printStackTrace();}}private static void addToTarArchive(File file, TarArchiveOutputStream tarArchive) throws IOException {String entryName = file.getName();TarArchiveEntry tarEntry = new TarArchiveEntry(file, entryName);tarArchive.putArchiveEntry(tarEntry);if (file.isFile()) {try (FileInputStream fis = new FileInputStream(file)) {byte[] buffer = new byte[1024];int len;while ((len = fis.read(buffer)) != -1) {tarArchive.write(buffer, 0, len);}tarArchive.closeArchiveEntry();}} else if (file.isDirectory()) {tarArchive.closeArchiveEntry();File[] children = file.listFiles();if (children != null) {for (File child : children) {addToTarArchive(child, tarArchive);}}}}
}
在此示例中,使用了 Apache Commons Compress 库,你可以在 Maven =添加以下依赖:
Maven:
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-compress</artifactId><version>1.21</version> <!-- 或者更高的版本 -->
</dependency>
确保将 path/to/your/source/file_or_folder
替换为要打包的文件或文件夹的实际路径,然后运行代码以创建 output.tar.gz
文件。
3.将指定目录下的文件打包成 .tar
Java的标准库中并没有直接支持创建.tar
格式文件的类,但你可以使用Apache Commons Compress库来完成这个任务。下面是一个示例代码:
首先,确保你在项目中包含了Apache Commons Compress库。如果使用Maven,可以在pom.xml
文件中添加以下依赖项:
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-compress</artifactId><version>1.21</version> <!-- 或者更高的版本 -->
</dependency>
然后,使用以下代码将文件打包成.tar
文件:
import org.apache.commons.compress.archivers.tar.*;
import org.apache.commons.compress.utils.IOUtils;import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;public class TarFiles {public static void main(String[] args) {// 要打包的文件或文件夹String sourceFile = "path/to/your/source/file_or_folder";// 打包后的tar文件名String tarFileName = "output.tar";try {FileOutputStream fos = new FileOutputStream(tarFileName);BufferedOutputStream bos = new BufferedOutputStream(fos);TarArchiveOutputStream tarArchive = new TarArchiveOutputStream(bos);addToTarArchive(sourceFile, tarArchive);tarArchive.finish();tarArchive.close();System.out.println("文件已成功打包成 " + tarFileName);} catch (IOException e) {e.printStackTrace();}}private static void addToTarArchive(String filePath, TarArchiveOutputStream tarArchive) throws IOException {Path sourcePath = Paths.get(filePath);String baseDir = sourcePath.getFileName().toString();Files.walk(sourcePath).filter(path -> !Files.isDirectory(path)).forEach(path -> {try {String entryName = baseDir + File.separator + sourcePath.relativize(path).toString();TarArchiveEntry tarEntry = new TarArchiveEntry(path.toFile(), entryName);tarArchive.putArchiveEntry(tarEntry);FileInputStream fis = new FileInputStream(path.toFile());IOUtils.copy(fis, tarArchive);fis.close();tarArchive.closeArchiveEntry();} catch (IOException e) {e.printStackTrace();}});}
}
在这个示例中,我们使用了Apache Commons Compress库来创建.tar
文件。确保将path/to/your/source/file_or_folder
替换为你要打包的实际文件或文件夹的路径,并运行代码来创建output.tar
文件。
4.将指定目录下的文件打包成 .rar
在Java中,压缩成RAR格式的操作稍微有些复杂,因为RAR格式是一种专有格式,并没有Java标准库提供直接支持。为了压缩文件为RAR格式,你可以使用第三方库,比如通过调用WinRAR或其他命令行工具来实现。
一种方法是使用Java的ProcessBuilder
来运行命令行来执行WinRAR或其他RAR压缩工具的命令。以下是一个简单的示例,假设你已经安装了WinRAR并将其路径添加到了系统的环境变量中:
import java.io.*;public class RARFiles {public static void main(String[] args) {// 要压缩的文件或文件夹String sourceFile = "path/to/your/source/file_or_folder";// 压缩后的RAR文件名String rarFileName = "output.rar";try {// 构建命令行String[] command = {"cmd", "/c", "rar", "a", "-r", rarFileName, sourceFile};// 创建进程并执行命令ProcessBuilder processBuilder = new ProcessBuilder(command);Process process = processBuilder.start();// 读取进程输出(可选)BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));String line;while ((line = reader.readLine()) != null) {System.out.println(line);}// 等待进程执行结束int exitCode = process.waitFor();if (exitCode == 0) {System.out.println("文件已成功打包成 " + rarFileName);} else {System.out.println("打包过程中出现错误");}} catch (IOException | InterruptedException e) {e.printStackTrace();}}
}
请替换 path/to/your/source/file_or_folder
为你要压缩的文件或文件夹的路径,并确保系统中已经正确安装和配置了WinRAR。
记住,这种方法需要系统中安装有WinRAR并且路径被正确添加到系统的环境变量中,且这个示例中的代码并没有对WinRAR命令返回的错误进行详细处理。
5.生成若干个txt并打包到zip中
代码示例:
import java.io.*;
import java.util.zip.*;public class GenerateTxtFilesAndZip {public static void main(String[] args) {String basePath = "path/to/your/directory"; // 更换为你想要保存文件的文件夹路径int fileCount = 10; // 要生成的文件数量try {// 创建文件夹(如果不存在)File directory = new File(basePath);if (!directory.exists()) {directory.mkdirs();}// 生成txt文件并写入内容for (int i = 1; i <= fileCount; i++) {String fileName = "file" + i + ".txt";String filePath = basePath + File.separator + fileName;String fileContent = "This is the content of " + fileName;try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {writer.write(fileContent);} catch (IOException e) {e.printStackTrace();}}// 打包成zip文件String zipFileName = "output.zip";byte[] buffer = new byte[1024];FileOutputStream fos = new FileOutputStream(zipFileName);ZipOutputStream zos = new ZipOutputStream(fos);File dir = new File(basePath);File[] files = dir.listFiles();if (files != null) {for (File file : files) {if (file.getName().endsWith(".txt")) {FileInputStream fis = new FileInputStream(file);zos.putNextEntry(new ZipEntry(file.getName()));int length;while ((length = fis.read(buffer)) > 0) {zos.write(buffer, 0, length);}zos.closeEntry();fis.close();}}}zos.close();System.out.println("文件已成功打包成 " + zipFileName);} catch (IOException e) {e.printStackTrace();}}
}
请替换path/to/your/directory
为你想要保存生成文件的实际文件夹路径。这段代码会在指定路径下生成10个.txt
文件,并将它们打包成一个名为output.zip
的ZIP文件。
相关文章:
Java打成压缩包的方法汇总
文章目录 1.将指定目录下的文件打包成 .zip2.将指定目录下的文件打包成 .tar.gz3.将指定目录下的文件打包成 .tar4.将指定目录下的文件打包成 .rar5.生成若干个txt并打包到zip中 1.将指定目录下的文件打包成 .zip 代码示例: import java.io.*; import java.util.z…...
2023年第2季社区Task挑战赛贡献者榜单
基于FISCO BCOS及Weldentity,实现SSO单点登录服务;提供食品溯源、电商运费险7天退保、电子病历等智能合约库业务场景案例;基于FISCO BCOS更新游戏体验;体验并分析解读最新发布的分布式数据协作管理解决方案DDCMS,提供相…...
Clickhouse 为什么快
ClickHouse是一个用于联机分析处理(OLAP)的开源列式数据库管理系统(DBMS)。它之所以能提供出色的查询性能和处理速度,主要归功于以下几个方面的设计和优化: 列式存储 ClickHouse存储数据按列而不是按行组织…...
【React系列】react-router
本文来自#React系列教程:https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 认识react-router 1.2. 前端路由原理 前端路由是如何做到URL和内容进行映射呢?监听URL的改变。 UR…...
[数据集][目标检测]车辆检测数据集VOC+YOLO格式1.6w张3类别
一共分为3个压缩包: 【车辆检测数据集AVOCYOLO格式5423张3类别】 数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):5423 标注数…...
FindMy技术用于鼠标
鼠标是计算机的标准配置之一,其设计初衷是为了使计算机的操作更加简便快捷,减少用户在操作中的负担。用户可以通过移动鼠标,实现光标的精确移动,进而选择、拖拽、复制、粘贴等操作。这种操作方式,使得计算机的操作变得…...
已解决‘ping‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。”的问题
已解决‘ping‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。”的问题 文章目录 问题介绍 问题分析 解决思路 解决方法 检查并修复环境变量 进入c:\windows\system32再ping 使用系统工具修复系统文件 Q1 - 问题介绍 当您尝试在Windows命令提示符下…...
基于PGPGPOOL-II部署PostgreSQL高可用环境
PGPOOL-II是一个位于PostgreSQL服务器和 PostgreSQL 数据库客户端之间的中间件,具有以下功能: 1. 连接池:PGPOOL-II可以保持已经连接到 PostgreSQL 服务器的连接,并在使用相同参数(例如:用户名、数据库、协议版本)连接进来时重用它们。这可以减少连接开销,并增加系统的…...
【大数据进阶第二阶段之Hadoop学习笔记】Hadoop 运行环境搭建
【大数据进阶第二阶段之Hadoop学习笔记】Hadoop 概述-CSDN博客 【大数据进阶第二阶段之Hadoop学习笔记】Hadoop 运行环境搭建-CSDN博客 【大数据进阶第二阶段之Hadoop学习笔记】Hadoop 运行模式-CSDN博客 1、模板虚拟机环境准备 1.1、 hadoop100 虚拟机配置要求如下 &…...
Python 操作 JMeter 探索:pymeter 实操指南
概要 JMeter 是一个流行的性能测试工具,用于测试 Web 应用程序的性能和负载。它通常与 GUI 一起使用,但如果您想在自动化测试中集成 JMeter,或者以编程方式创建和运行测试计划,那么 pymeter 库将是一个强大的工具。本文将介绍如何…...
微软 Power Platform 使用Power Automate发送邮件以Dataverse作为数据源的附件File Column
微软Power Platform使用Power Automate发送邮件添加Power Apps以Dataverse作为数据源的附件File Column方式 目录 微软Power Platform使用Power Automate发送邮件添加Power Apps以Dataverse作为数据源的附件File Column方式1、需求背景介绍2、附件列File Column介绍3、如何在Po…...
雾天条件下 SLS 融合网络的三维目标检测
论文地址:3D Object Detection with SLS-Fusion Network in Foggy Weather Conditions 论文代码:https://github.com/maiminh1996/SLS-Fusion 论文摘要 摄像头或激光雷达(光检测和测距)等传感器的作用对于自动驾驶汽车的环境意识…...
在pycharm中执行 os.makedirs 提示用户名或密码不正确
问题:在pycharm中运行脚本,在 \10.0.21.249\share 共享目录下创建目录提示错误 发现:手动在该目录下创建目录没有问题。 解决方法: 切换到cmd 命令行运行该脚本成功创建 猜测:感觉应该是pycharm中使用的用户名和密码存…...
使用Go语言编写高效的HTTP服务器
随着互联网的快速发展,HTTP服务器在Web开发中扮演着越来越重要的角色。而Go语言作为一种高效、并发性强的编程语言,为编写高性能的HTTP服务器提供了强大的支持。本文将探讨如何使用Go语言编写高效的HTTP服务器。 首先,我们需要了解Go语言的H…...
代码随想录day20 开始二叉搜索树
654.最大二叉树 题目 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构…...
从0开始python学习-39.requsts库
目录 HTTP协议 1. 请求 2. 响应 Requests库 1. 安装 2. 请求方式 2.1 requests.请求方式(参数) 2.2 requests.request() 2.3 requests.session().request() 2.4 三种方式之间的关联 3. 请求参数 3.1 params:查询字符串参数 3.2 data:Form表单…...
【面试高频算法解析】算法练习3 双指针
前言 本专栏旨在通过分类学习算法,使您能够牢固掌握不同算法的理论要点。通过策略性地练习精选的经典题目,帮助您深度理解每种算法,避免出现刷了很多算法题,还是一知半解的状态 专栏导航 二分查找回溯双指针滑动窗口深度优先搜索…...
React16源码: Why16, 研究源码的意义, 源码目录核心结构分析
为什么要选择React16 现在React18都早已实践很多,为何回过头来看16版本的代码理由如下 从实际出发,企业内老旧项目多为16版本,理解16的核心能够帮助我们快速解决问题16版本React是完全重写了核心代码, 是一次重大的更新 引入了 fiber 这个概…...
mybatis-flex笔记
MyBatis-Flex 的增删改功能 - MyBatis-Flex 官方网站https://mybatis-flex.com/zh/base/add-delete-update.html 代码https://gitee.com/hntianshu/mybatis-flex-test 一 新增数据 不忽略 null 值。 就是允许有null 忽略null 就是不允许有null BaseMapper 的接口提供了 inser…...
Debezium发布历史47
原文地址: https://debezium.io/blog/2019/02/13/debezium-0-9-1-final-released/ 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. Debezium 0.9.1.Final 发布 二月 13, 2019 作者: Gunna…...
Python爬虫抓包常见问题解决
对于Python爬虫和Fiddler抓包,可能遇到的问题及解决: 代理设置错误:如果你在使用Python爬虫时遇到抓不到包的问题,首先应该检查你的浏览器代理设置是否正确。以Chrome为例,代理设置为:右上角菜单按钮>设…...
c++跨平台ui
fltk https://gitee.com/mirrors_fltk/fltk.git codeblock中有fltk项目开发模板,可以快速构建项目 wxwidget https://gitee.com/sofu456/wxWidgets.git git submodule update --init --recursive 打开demo和sample set(wxBUILD_SAMPLES ALL) set(wxBUILD_DEMOS ON) build/…...
stable diffusion 基础教程-提示词之艺术风格用法
展现夕阳 golden hour, (rim lighting):1.2, warm tones, sun flare, soft shadows, vibrant colors, hazy glow, painterly effect, dreamy atmosphere阴影 chiaroscuro, (high contrast):1.2, dramatic shadows, bold highlights, moody atmosphere, captivating inte…...
【日积月累】Java中 正则表达式
目录 日积月累】Java中 正则表达式 1.前言2.基本语法3.Pattern和Matcher类4.校验的表达式大全5.参考文章所属专区 日积月累 1.前言 正则表达式是一种用于匹配文本模式的语法,它通常与编程语言一起使用。在Java中,正则表达式用于匹配字符串,可以使用Pattern和Matcher类来实…...
Java调用百度云语音识别【音频转写】
百度云文档 ttps://ai.baidu.com/ai-doc/SPEECH/Bk5difx01 示例代码: import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import lombok.extern.slf4j.Slf4j; import okhttp3.*; import org.json.JSONObject; import org.springframework.stereotyp…...
pyparamvalidate 项目背景和需求分析
目录 一、前置说明1、总体目录2、本节目标 二、项目背景三、需求分析三、后置说明1、要点小结2、下节预告 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器,从编码到发布全过程》 2、本节目标 阐述 pyparamvalidate 项目背景和需求分析。 二、项目背景…...
Docker Linux快速安装及Nginx部署
前言 最近正在部署一套新的Linux服务器环境,基于Docker来部署所有的应用,顺便整理了一套经过验证的操作手册,以便大家遇到类似需求时,可以直接拿来用。 本文会涉及以下知识点:Docker的Linux安装和卸载、Docker用户组…...
Mac M1 Parallels CentOS7.9 Install Parallels Tools
一、挂载parallels-tools安装包 mkdir /media/cdrom/ mount /dev/cdrom /media/cdrom/ mount: /dev/sr0 写保护,将以只读方式挂载二、GCC升级 yum install -y centos-release-scl yum install -y devtoolset-8-gcc*# 切换当前会话中gcc版本为8 scl enable devtool…...
计算机网络物理层 习题答案及解析
2-1 下列选项中,不属于物理层接口规范定义范畴的是( D )。 A. 引脚功能 B. 接口形状 C. 信号电平 D. 传输媒体 【答案】D 【解析】 2-2 某网络在物理层规定,信号的电平范围为- 15V~15V , 电线长…...
【解决】Unity 设置跨设备分辨率表现
开发平台:Unity 2018版本以上 开发语言:CSharp 编程平台:Visual Studio 2022 问题描述 使用 UnityEngine.dll 中关于设置分辨率的方法时,无法满足应用以设定分辨率进行屏幕显示问题。因而造成画面不同程度的拉伸情况。而这种情…...
dw中怎样做网站二级页面/什么是seo优化?
RHEL7 或CentOS7配置共享存储--使用iSCSI 环境: RHEL 7.3 1.LVM创建 2.服务端配置 3.客户端配置 1.LVM创建 在RHEL7.3中,对于lvm操作部分与之前RHEL6版本没有区别,还是创建pv,vg,lv的方法,命令参考如…...
网站服务器搭建XP/怎么做市场营销和推广
文章目录前言一、动机二、Why Distributed Data Parallel?三、大图景(The big picture)四、最小例程与解释五、加上 MultiProcessing六、使用Apex进行混合混合精度训练参考链接前言 Data Parallel 并行运算时,各种原因导致单进程多…...
制作网页案例/百度快照优化
2019独角兽企业重金招聘Python工程师标准>>> 一、结论Spring的事务管理默认只对出现运行期异常(java.lang.RuntimeException及其子类)和Error 时进行回滚。如果一个方法抛出Checked异常,Spring事务管理默认不进行回滚。 rolling back on RuntimeExceptio…...
做网站需要哪些成本/广州白云区疫情实时动态
excel怎么冻结前两行不动?其实只要直接使用冻结窗格功能就可以了。下面我们来学习一下。冻结窗口怎么冻结多行步骤1、打开excel文件,例如这个表格。步骤2、只冻结前两行需要选中第三行,选择【视图】-【冻结窗格】;步骤3、在三角处打开&#…...
平面设计线/北京seo运营推广
5319. 删除回文子序列 题目描述 给你一个字符串 s,它仅由字母 a 和 b 组成。每一次删除操作都可以从 s 中删除一个回文 子序列。 返回删除给定字符串中所有字符(字符串为空)的最小删除次数。 「子序列」定义:如果一个字符串可…...
上海做兼职网站有吗/公众号seo排名软件
本工具用于快速求出通信中CRC16校验值,包括:1)CRC-16/DECT-R(别名:R-CRC-16)、2)CRC-16/DECT-X(别名:X-CRC-16)、3)CRC-16/GENIBUS(别名:CRC-16/EPC, CRC-16/I-CODE, CRC-16/DARC)、4)CRC-16/TMS37157、5)CRC-16/RIELL…...