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…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
