当前位置: 首页 > news >正文

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 代码示例&#xff1a; import java.io.*; import java.util.z…...

2023年第2季社区Task挑战赛贡献者榜单

基于FISCO BCOS及Weldentity&#xff0c;实现SSO单点登录服务&#xff1b;提供食品溯源、电商运费险7天退保、电子病历等智能合约库业务场景案例&#xff1b;基于FISCO BCOS更新游戏体验&#xff1b;体验并分析解读最新发布的分布式数据协作管理解决方案DDCMS&#xff0c;提供相…...

Clickhouse 为什么快

ClickHouse是一个用于联机分析处理&#xff08;OLAP&#xff09;的开源列式数据库管理系统&#xff08;DBMS&#xff09;。它之所以能提供出色的查询性能和处理速度&#xff0c;主要归功于以下几个方面的设计和优化&#xff1a; 列式存储 ClickHouse存储数据按列而不是按行组织…...

【React系列】react-router

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 认识react-router 1.2. 前端路由原理 前端路由是如何做到URL和内容进行映射呢&#xff1f;监听URL的改变。 UR…...

[数据集][目标检测]车辆检测数据集VOC+YOLO格式1.6w张3类别

一共分为3个压缩包&#xff1a; 【车辆检测数据集AVOCYOLO格式5423张3类别】 数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;5423 标注数…...

FindMy技术用于鼠标

鼠标是计算机的标准配置之一&#xff0c;其设计初衷是为了使计算机的操作更加简便快捷&#xff0c;减少用户在操作中的负担。用户可以通过移动鼠标&#xff0c;实现光标的精确移动&#xff0c;进而选择、拖拽、复制、粘贴等操作。这种操作方式&#xff0c;使得计算机的操作变得…...

已解决‘ping‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。”的问题

已解决‘ping‘ 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。”的问题 文章目录 问题介绍 问题分析 解决思路 解决方法 检查并修复环境变量 进入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 是一个流行的性能测试工具&#xff0c;用于测试 Web 应用程序的性能和负载。它通常与 GUI 一起使用&#xff0c;但如果您想在自动化测试中集成 JMeter&#xff0c;或者以编程方式创建和运行测试计划&#xff0c;那么 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 融合网络的三维目标检测

论文地址&#xff1a;3D Object Detection with SLS-Fusion Network in Foggy Weather Conditions 论文代码&#xff1a;https://github.com/maiminh1996/SLS-Fusion 论文摘要 摄像头或激光雷达&#xff08;光检测和测距&#xff09;等传感器的作用对于自动驾驶汽车的环境意识…...

在pycharm中执行 os.makedirs 提示用户名或密码不正确

问题&#xff1a;在pycharm中运行脚本&#xff0c;在 \10.0.21.249\share 共享目录下创建目录提示错误 发现&#xff1a;手动在该目录下创建目录没有问题。 解决方法&#xff1a; 切换到cmd 命令行运行该脚本成功创建 猜测&#xff1a;感觉应该是pycharm中使用的用户名和密码存…...

使用Go语言编写高效的HTTP服务器

随着互联网的快速发展&#xff0c;HTTP服务器在Web开发中扮演着越来越重要的角色。而Go语言作为一种高效、并发性强的编程语言&#xff0c;为编写高性能的HTTP服务器提供了强大的支持。本文将探讨如何使用Go语言编写高效的HTTP服务器。 首先&#xff0c;我们需要了解Go语言的H…...

代码随想录day20 开始二叉搜索树

654.最大二叉树 题目 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下&#xff1a; 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构…...

从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&#xff1a;查询字符串参数 3.2 data&#xff1a;Form表单…...

【面试高频算法解析】算法练习3 双指针

前言 本专栏旨在通过分类学习算法&#xff0c;使您能够牢固掌握不同算法的理论要点。通过策略性地练习精选的经典题目&#xff0c;帮助您深度理解每种算法&#xff0c;避免出现刷了很多算法题&#xff0c;还是一知半解的状态 专栏导航 二分查找回溯双指针滑动窗口深度优先搜索…...

React16源码: Why16, 研究源码的意义, 源码目录核心结构分析

为什么要选择React16 现在React18都早已实践很多&#xff0c;为何回过头来看16版本的代码理由如下 从实际出发&#xff0c;企业内老旧项目多为16版本&#xff0c;理解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

原文地址&#xff1a; https://debezium.io/blog/2019/02/13/debezium-0-9-1-final-released/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. Debezium 0.9.1.Final 发布 二月 13, 2019 作者&#xff1a; Gunna…...

Python爬虫抓包常见问题解决

对于Python爬虫和Fiddler抓包&#xff0c;可能遇到的问题及解决&#xff1a; 代理设置错误&#xff1a;如果你在使用Python爬虫时遇到抓不到包的问题&#xff0c;首先应该检查你的浏览器代理设置是否正确。以Chrome为例&#xff0c;代理设置为&#xff1a;右上角菜单按钮>设…...

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 参数校验器&#xff0c;从编码到发布全过程》 2、本节目标 阐述 pyparamvalidate 项目背景和需求分析。 二、项目背景…...

Docker Linux快速安装及Nginx部署

前言 最近正在部署一套新的Linux服务器环境&#xff0c;基于Docker来部署所有的应用&#xff0c;顺便整理了一套经过验证的操作手册&#xff0c;以便大家遇到类似需求时&#xff0c;可以直接拿来用。 本文会涉及以下知识点&#xff1a;Docker的Linux安装和卸载、Docker用户组…...

Mac M1 Parallels CentOS7.9 Install Parallels Tools

一、挂载parallels-tools安装包 mkdir /media/cdrom/ mount /dev/cdrom /media/cdrom/ mount: /dev/sr0 写保护&#xff0c;将以只读方式挂载二、GCC升级 yum install -y centos-release-scl yum install -y devtoolset-8-gcc*# 切换当前会话中gcc版本为8 scl enable devtool…...

计算机网络物理层 习题答案及解析

2-1 下列选项中&#xff0c;不属于物理层接口规范定义范畴的是&#xff08; D &#xff09;。 A. 引脚功能 B. 接口形状 C. 信号电平 D. 传输媒体 【答案】D 【解析】 2-2 某网络在物理层规定&#xff0c;信号的电平范围为- 15V~15V &#xff0c; 电线长…...

【解决】Unity 设置跨设备分辨率表现

开发平台&#xff1a;Unity 2018版本以上 开发语言&#xff1a;CSharp 编程平台&#xff1a;Visual Studio 2022   问题描述 使用 UnityEngine.dll 中关于设置分辨率的方法时&#xff0c;无法满足应用以设定分辨率进行屏幕显示问题。因而造成画面不同程度的拉伸情况。而这种情…...

dw中怎样做网站二级页面/什么是seo优化?

RHEL7 或CentOS7配置共享存储--使用iSCSI 环境&#xff1a; RHEL 7.3 1.LVM创建 2.服务端配置 3.客户端配置 1.LVM创建 在RHEL7.3中&#xff0c;对于lvm操作部分与之前RHEL6版本没有区别,还是创建pv&#xff0c;vg&#xff0c;lv的方法&#xff0c;命令参考如…...

网站服务器搭建XP/怎么做市场营销和推广

文章目录前言一、动机二、Why Distributed Data Parallel&#xff1f;三、大图景&#xff08;The big picture&#xff09;四、最小例程与解释五、加上 MultiProcessing六、使用Apex进行混合混合精度训练参考链接前言 Data Parallel 并行运算时&#xff0c;各种原因导致单进程多…...

制作网页案例/百度快照优化

2019独角兽企业重金招聘Python工程师标准>>> 一、结论Spring的事务管理默认只对出现运行期异常(java.lang.RuntimeException及其子类)和Error 时进行回滚。如果一个方法抛出Checked异常&#xff0c;Spring事务管理默认不进行回滚。 rolling back on RuntimeExceptio…...

做网站需要哪些成本/广州白云区疫情实时动态

excel怎么冻结前两行不动?其实只要直接使用冻结窗格功能就可以了。下面我们来学习一下。冻结窗口怎么冻结多行步骤1、打开excel文件&#xff0c;例如这个表格。步骤2、只冻结前两行需要选中第三行&#xff0c;选择【视图】-【冻结窗格】&#xff1b;步骤3、在三角处打开&#…...

平面设计线/北京seo运营推广

5319. 删除回文子序列 题目描述 给你一个字符串 s&#xff0c;它仅由字母 a 和 b 组成。每一次删除操作都可以从 s 中删除一个回文 子序列。 返回删除给定字符串中所有字符&#xff08;字符串为空&#xff09;的最小删除次数。 「子序列」定义&#xff1a;如果一个字符串可…...

上海做兼职网站有吗/公众号seo排名软件

本工具用于快速求出通信中CRC16校验值&#xff0c;包括&#xff1a;1)CRC-16/DECT-R(别名&#xff1a;R-CRC-16)、2)CRC-16/DECT-X(别名&#xff1a;X-CRC-16)、3)CRC-16/GENIBUS(别名&#xff1a;CRC-16/EPC, CRC-16/I-CODE, CRC-16/DARC)、4)CRC-16/TMS37157、5)CRC-16/RIELL…...