使用Java解压和压缩文件

Java压缩与解压缩ZIP文件 小而美的使用JDK自带的ZIP工具包生成与解压缩ZIP文件 阅读详情

目录

一、压缩文件

二、解压文件 


在Java中,你可以使用java.util.zip包来实现解压和压缩文件。这个包提供了对ZIP格式的文件进行压缩和解压的功能。

一、压缩文件

ZipOutputStream 是 Java 中用于创建 ZIP 文件的类。它是 java.util.zip 包中的一部分,允许你将多个文件或目录压缩到单个 ZIP 文件中。

  1. 创建 ZipOutputStream: 要创建 ZipOutputStream 对象,你需要将其与一个输出流(通常是 FileOutputStream)关联,以便将压缩数据写入文件。

    FileOutputStream fos = new FileOutputStream("compressed.zip"); 
    ZipOutputStream zipOut = new ZipOutputStream(fos);
  2. 添加 ZIP 条目: 使用 putNextEntry 方法来添加一个新的 ZIP 条目(文件或目录)。你需要指定条目的名称,它可以是文件名或相对路径。

    ZipEntry zipEntry = new ZipEntry("file.txt"); 
    zipOut.putNextEntry(zipEntry);
  3. 写入数据: 使用 write 方法来将数据写入 ZIP 条目。你可以循环从文件或其他数据源中读取数据,并将其写入 ZipOutputStream。

    byte[] buffer = new byte[1024];
    int length;
    while ((length = inputStream.read(buffer)) >= 0) {
        zipOut.write(buffer, 0, length);
    }
    
  4. 关闭 ZIP 条目: 当完成写入 ZIP 条目的数据后,必须使用 closeEntry 方法来关闭条目。

    zipOut.closeEntry();
  5. 关闭 ZipOutputStream: 当所有 ZIP 条目都已添加和关闭后,需要关闭 ZipOutputStream。

    zipOut.close();
  6. ZIP 条目属性: ZipEntry 对象允许你设置各种属性,如文件的修改时间、权限等。

    ZipEntry zipEntry = new ZipEntry("file.txt");
    zipEntry.setTime(file.lastModified());
    zipEntry.setSize(file.length());
    zipEntry.setMethod(ZipEntry.STORED);
    
  7. 压缩方法: ZipOutputStream 支持不同的压缩方法,可以根据需要设置。默认情况下,使用标准的 DEFLATED 压缩方法。

  8. 异常处理: 要注意处理可能的异常,例如文件不存在、权限问题等。确保正确关闭流以释放资源。

 压缩文件示例如下:

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class FileCompression {
    public static void main(String[] args) {
        String sourceFile = "source.txt"; // 要压缩的文件
        String compressedFile = "compressed.zip"; // 压缩后的文件

        try {
            FileOutputStream fos = new FileOutputStream(compressedFile);
            ZipOutputStream zipOut = new ZipOutputStream(fos);
            File fileToZip = new File(sourceFile);

            FileInputStream fis = new FileInputStream(fileToZip);
            ZipEntry zipEntry = new ZipEntry(fileToZip.getName());
            zipOut.putNextEntry(zipEntry);

            byte[] bytes = new byte[1024];
            int length;
            while ((length = fis.read(bytes)) >= 0) {
                zipOut.write(bytes, 0, length);
            }

            fis.close();
            zipOut.close();
            fos.close();
            System.out.println("文件压缩完成:" + compressedFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述示例中,我们使用ZipOutputStream将文件source.txt压缩为compressed.zip。

二、解压文件 

ZipInputStream 是 Java 中用于解压缩 ZIP 文件的类。它是 java.util.zip 包中的一部分,允许你从 ZIP 文件中读取数据。

  1. 创建 ZipOutputStream: 要创建 ZipOutputStream 对象,你需要将其与一个输出流(通常是 FileOutputStream)关联,以便将压缩数据写入文件。

    FileOutputStream fos = new FileOutputStream("compressed.zip");
    ZipOutputStream zipOut = new ZipOutputStream(fos);
    
  2. 添加 ZIP 条目: 使用 putNextEntry 方法来添加一个新的 ZIP 条目(文件或目录)。你需要指定条目的名称,它可以是文件名或相对路径。

    ZipEntry zipEntry = new ZipEntry("file.txt");
    zipOut.putNextEntry(zipEntry);
    
  3. 写入数据: 使用 write 方法来将数据写入 ZIP 条目。你可以循环从文件或其他数据源中读取数据,并将其写入 ZipOutputStream。

    byte[] buffer = new byte[1024];
    int length;
    while ((length = inputStream.read(buffer)) >= 0) {
        zipOut.write(buffer, 0, length);
    }
    
  4. 关闭 ZIP 条目: 当完成写入 ZIP 条目的数据后,必须使用 closeEntry 方法来关闭条目。

    zipOut.closeEntry();
    
  5. 关闭 ZipOutputStream: 当所有 ZIP 条目都已添加和关闭后,需要关闭 ZipOutputStream。

    zipOut.close();
    
  6. ZIP 条目属性: ZipEntry 对象允许你设置各种属性,如文件的修改时间、权限等。

    ZipEntry zipEntry = new ZipEntry("file.txt");
    zipEntry.setTime(file.lastModified());
    zipEntry.setSize(file.length());
    zipEntry.setMethod(ZipEntry.STORED);
    
  7. 压缩方法: ZipOutputStream 支持不同的压缩方法,可以根据需要设置。默认情况下,使用标准的 DEFLATED 压缩方法。

  8. 异常处理: 要注意处理可能的异常,例如文件不存在、权限问题等。确保正确关闭流以释放资源。

 

java实现调用方法解压和压缩给定的文件夹方法 java实现解压和压缩的方法 阅读详情

相关推荐

Java 上传解压zip文件,并且解析文件里面的exc...

PS:为了方便不同水平的开发人员阅读,我把代码全部写到Controller里面。这个demo的file入参的类型是MultipartFile,很多网上的例子是File类型。这两个类型在解析文件的时候还是有点区别的。 第①个方法: [url=][/url]1 /**2 * 这个deomo入参的类型是MultipartFile,很多网上的例子是File类型3 *@...

黑马程序员广州中心的专栏 1169

Java 导入zip,并进行解压

Java 导入zip,并进行解压 场景一:上传zip包,后台进行解压,提取里面的文件,进行上传。 场景二:上传zip,后台进行解压,提取zip包中“文件夹”以及该“文件夹”下的文件后,再进行压缩上传。

ding43930053的专栏 8362

java解压gz文件

java解压gz文件

qq_43685474的博客 3231

JAVA实现压缩解压文件

JAVA实现压缩解压文件

xingchenyv的博客 1万+

7系列ZYNQ硬件调试:Vitis无法识别ARM DAP的排查与解决

本文针对7系列ZYNQ开发中Vitis无法识别ARM DAP的典型硬件调试问题,提供了系统性的排查与解决方案。文章深入剖析了问题本质,指出ARM DAP无法访问的核心原因在于PS部分的电源、时钟或复位等硬件基础条件未满足,并重点强调了PS参考时钟(如33.333MHz晶振)的完整性是关键排查点。通过从电源完整性、时钟与复位信号到JTAG连接与焊接的逐步硬件排查,并结合软件配置交叉验证,为开发者提供了清晰的故障定位思路与实战指南。

weixin_29280657的博客 626

迈德威视相机调用( 基于 Linux系统+ OpenCV )

迈德威视相机调用( 基于 Linux系统+ OpenCV )前言一、登录迈德威视官网,下载官方SDK二、代码调用与视频帧处理( 基于 OpenCV )总结 前言     此博客记录了迈德威视工业相机在 Linux 系统下的代码调用及其环境配置,通过 OpenCV 对视频帧进行处理。   一、登录迈德威视官网,下载官方SDK      迈德威视官网 : http://www.mindvision.com.cn/     1. 进入官网后,在服务支持中选择软件下载。    2. 选择Linux系统S.

kkkkkk0729的博客 5678

java使用unrar解压压缩文件

Java使用unrar解压压缩文件 在Java开发中,经常会遇到需要解压缩文件的情况,而RAR格式是比较常见的压缩格式之一。为了在Java中解压RAR文件,我们可以使用一个开源的库junrar,它是一个用Java编写的解压缩RAR文件的工具。 安装junrar库 首先,我们需要在项目中引入junrar库。可以通过Maven...

weixin_29465407的博客 568

Win10系统权限深度解析:如何安全地将C盘所有者从TrustedInstaller变更为Administrators

本文深入解析了Win10系统中C盘文件权限管理的核心机制,解释了为何管理员账户(Administrators)默认无法修改由TrustedInstaller保护的系统文件。文章在强调安全风险的前提下,详细提供了通过图形界面和命令行两种方式,将文件或文件夹所有权从TrustedInstaller安全变更为Administrators的实操步骤,并给出了关键的风险预警与权限恢复方法。

weixin_29305313的博客 549

apache zip java_java使用apache的工具类对zip(rar等压缩文件)进行解压的实例

java使用apache的工具类对zip(rar等压缩文件)进行解压的实例,java压缩文件解压源码实例:先到Ant官网下载一个Ant,然后在项目中导入Ant.jar,直接上代码:(在import时要注意引入ant.jar中的压缩工具类)package hoking.in.action;import java.io.BufferedInputStream;import java.io.Buffer...

weixin_29603387的博客 609

课设报告-超市收银系统 javaweb(附源代码)

超市收银系统由收银员输入顾客的会员卡卡号(若有卡),所购买的货号。从数据库中取出有关价格信息,在把这些信息返回给收银台,同时把收银台的销售总量和有关种类商品的剩余量以及该持卡顾客的消费情况交数据库存储以供查询。另外,对没有卡的消费不记录该顾客的消费情况扥个人信息,如果一个未持卡顾客一次购买满200元,可围棋发放一张会员卡,以后在该商场购物可享受9折优惠。

m0_71106830的博客 2974

基于相位检测与锁相环的DIY超声波风速仪设计与实现

相位检测是信号处理中的一项基础技术,它通过测量两个周期信号之间的相位差来获取信息。其核心原理在于,当信号在介质中传播时,外部因素(如风速)会改变其传播速度,从而导致接收端信号的相位发生偏移。锁相环(PLL)是实现高精度相位检测的关键电路,它能动态调整本地振荡器的频率,以跟踪并锁定输入信号的相位,从而将微小的相位变化转换为易于测量的电压信号。这项技术的工程价值在于其对电路精度要求相对较低,鲁棒性好,非常适合低成本、高灵敏度的测量应用。在气象监测、工业传感和消费电子等领域,相位检测技术被广泛用于风速风向测量、位

weixin_29540599的博客 387

java 使用7-zip解压缩带密码的压缩文件(非Proccess方法)

Java使用7-Zip库解压加密RAR ZIP文件方法 http://blog.sina.com.cn/s/blog_600ff0750100zamb.html http://blog.youkuaiyun.com/xiongyingzhuantu/article/details/6407506 压缩包内的文件大于32k(即32768),则解压后的文件只写了最后一部分,并不是一个完整的文件。 经测试,修改后的代码 http://love3400wind.blog.163.com/blog/static/79630801

kevenwu21的博客 1100

基于CY7C68013A芯片的USB2.0设计

基于FPGA的USB2.0读写控制项目简介CY7C68013A芯片介绍CY7C68013A芯片读写时序控制CY7C68013A芯片读写代码USB2.0的测试结果结束语 项目简介 我们前面已经写过了USB3.0的FPGA实现,所用到的芯片是FX600Q芯片,这次我们讲解USB2.0的FPGA代码的编写。我们用到的芯片是Cypress厂家的Cy7C68013A,该款芯片在市场上的应用率极广,我们这里不...

zhangningning1996的博客 1万+

java对压缩文件进行加密,解压直接输入解密密码来使用

<!-- https://mvnrepository.com/artifact/net.lingala.zip4j/zip4j --> <dependency> <groupId>net.lingala.zip4j</groupId> <artifactId>zip4j</artifactId> <version>1.3.2</version> </dependency> .

haylee的专栏 1536

第二十一篇: `man`, `tldr`, `explain` - 授人以渔的“终极指令”

我们已经一起学习了19个(组)关键命令,从nvidia-smi到kubectl。但这只是GPU运维武器库中的一小部分。技术日新月异,新的工具、新的参数会不断涌现。这个系列的真正目的,不仅是教会你使用这19件“兵器”,更是希望你掌握学习任何一件新兵器的方法论。这套方法论就是你的“终极指令”。授人以鱼不如授人以渔。至此,《GPU运维指令集:20个关键命令的战地手册》系列已全部完结。我们从nvidia-smi出发,一路探索了监控、诊断、容器、集群、网络、性能等各个维度的命令,最后用自动化脚本将它们串联,又用。

weixin_42587823的博客 1350

Raspberry Pi Pico + Inmp441麦克风(Pio模拟I2s)<2>

摘要:本文介绍了在Raspberry Pi Pico上使用PIO(Programmable I/O)接收I2S数字麦克风音频数据并保存为WAV文件的方法。项目采用双PIO状态机设计,一个生成I2S时钟信号(WS+SCK),另一个接收24位左声道数据并转换为16位格式。文章详细说明了接线方式、参数设置、WAV文件头构造、PIO汇编程序实现以及数据转换处理流程。项目在MicroPython环境下实现16kHz采样率、6秒时长录音,具有时序精确、稳定可靠的特性,并提供了进一步拓展的可能性,如双声道支持、实时频谱分

技术需要沉淀,需要碰撞。 658

使用Java生成的ZIP压缩包解压时出现不可预料的压缩文件末端的解决方案

使用Java生成的ZIP压缩包解压时出现不可预料的压缩文件末端的解决方案 问题描述: 如下图所示,在解压Java程序生成的ZIP压缩包时出现不可预料的压缩文件末端, 解决方案: 检查程序输出流是否关闭或者是否关闭顺序正确 进入视线压缩的代码: 从上面代码可以看出应该先打开的流后关闭,后打开的流先关闭,继续看下去, 从代码中看出是关闭可输出流,但是关闭的顺序写错了,应该先关闭ZipOutpu...

u012903926的专栏 9083

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

java压缩 c 解压_[Java 基础] 使用java.util.zip包压缩和解压缩文件

Java API中的import java.util.zip.*;包下包含了Java对于压缩文件的所有相关操作。我们可以使用该包中的方法,结合IO中的相关知识,进行文件的压缩和解压缩相关操作。ZipFilejava中的每一个压缩文件都是可以使用ZipFile来进行表示的。Filefile=newFile("F:/zippath.zip");ZipFilezipFile=newZip...

weixin_39956443的博客 192

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java导出Zip包使用WinRAR解压时报不可预料的压缩文件末端

【代码】java导出Zip包使用WinRAR解压时报不可预料的压缩文件末端。

呼叫冰河谷博客 870

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java 压缩文件tar_使用Java API进行tar.gz文件及文件夹压缩解压缩

在java(JDK)中我们可以使用ZipOutputStream去创建zip压缩文件,(参考我之前写的文章 使用java API进行zip递归压缩文件夹以及解压 ),也可以使用GZIPOutputStream去创建gzip(gz)压缩文件,但是java中没有一种官方的API可以去创建tar.gz文件。所以我们需要使用到第三方库Apache Commons Compress去创建.tar.gz文件。...

weixin_36111677的博客 486

java使用 zipoutputstream 进行解压缩时提示:不可预料的压缩文件末端

private static void zip(File filein, String basepath, ZipOutputStream out) throws IOException { FileInputStream in = null; try { if (filein.isDirectory()) { File files[] = filein.listFiles...

liu6219364的博客 4945

Java压缩文件以及解压缩文件(使用ant-1.10.7.jar)

package com.test.opeZip; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.tools.zip.ZipOutputStream; import java.io.*; import java.util.ArrayList; import ...

qq_38909957的博客 326

用JAVA解决压缩文件解压的两种方式:

然后,通过archive.getInputStream(fd)获取文件的输入流,并使用FileUtils.copyInputStreamToFile方法将输入流的内容复制到新创建的文件中。根目录创建完成后,我们要对压缩包中的子文件以及子目录进行创建,在读取压缩包内容时我们需要借助ZipInputStream方法用于进行zip格式的压缩文件输入流。为了确保根目录在运行之前是不存在的,我们要进行判断,如果它已经存在,就要删除它,直接使用delete方法只能删除空目录,当目录中有文件或其他内容时,就无法删除。

m0_72869421的博客 1169

[代码] Java 解压jar,zip,gzip等压缩文件

Java 解压jar,zip,gzip等压缩文件转载请注明,谢谢!/** * 解压 jar,zip,gzip等压缩文件 * 时间:2018-04-25 * @author Jason * */ public class Un_jar_zip_gzip_Utils { /** * 解压jar,zip,gzip等压缩包 * @param jarpath 压缩包全路径名 *...

JavaBuilt的博客 1544

java 解压本地zip压缩文件

解压本地zip压缩文件

灬灬的专栏 1188
上一篇: 详细解析SpringBoot自动装配
下一篇: 面试系列 - Redis分布式锁3种实现方式对比分析
境里婆娑
境里婆娑 新星创作者: Java技术领域 新星创作者: Java技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄10年 1万+粉丝 300原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

境里婆娑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值