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…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...
