JavaSE 面向对象程序设计进阶 IO 压缩流 解压缩流

news2024/9/17 7:34:56

目录

解压缩流

压缩流

解压缩流

压缩包

压缩包里面的每一个文件在java中都是一个ZipEntry对象

把每一个ZipEntry按照层级拷贝到另一个文件夹当中

import java.io.*;
import java.util.Date;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class Main {
    public static void main(String[] args){
        //创建一个File表示要解压的压缩包
        File src=new File("D\\untitled.zip");

        //创建一个File表示解压的目的地
        File dest=new File("D\\");
    }
    public static void unzip(File src,File dest) throws IOException {
        //创建一个压缩流来读取压缩包中的数据
        ZipInputStream zip=new ZipInputStream(new FileInputStream(src));

        ZipEntry entry;
        
        while((entry=zip.getNextEntry())!=null){
            System.out.println(entry);
            if(entry.isDirectory()){
                //文件夹:需要在目的地dest处创建一个同样的文件夹
                File file=new File(dest,entry.toString());
                file.mkdirs();
            }
            else {
                //文件:需要读取压缩包中的文件,并且把它存放到目的地dest文件夹中
                FileOutputStream fos=new FileOutputStream(new File(dest,entry.toString()));
                int b;
                while((b=zip.read())!=-1){
                    //写到目的地
                    fos.write(b);
                }
                fos.close();
                //表示在压缩包中的一个文件处理完毕了
                zip.closeEntry();
            }
        }
        
        zip.close();
    }
}

压缩流

压缩单个文件

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

public class Main {
    public static void main(String[] args) throws IOException {

        //创建File对象表示要压缩的文件
        File src=new File("untitled\\a.txt");

        //创建File对象表示压缩包的位置
        File dest=new File("untitled\\");

        //调用方法用来压缩
        toZip(src,dest);
    }

    private static void toZip(File src, File dest) throws IOException {
        //常见压缩流关联压缩包
        ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(new File(dest,"a.zip")));

        //创建ZipEntry对象,表示压缩包里面的每一个文件和文件夹
        ZipEntry entry=new ZipEntry("a.txt");

        //把ZipEntry对象放到压缩包中
        zos.putNextEntry(entry);
        
        //把src文件夹中的数据写到压缩包当中
        FileInputStream fis=new FileInputStream(src);
        int b;
        while((b=fis.read())!=-1)
            zos.write(b);

        zos.closeEntry();
        zos.close();
    }
}

压缩整个文件夹

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

public class Main {
    public static void main(String[] args) throws IOException {

        //创建File对象表示要压缩的文件夹
        File src=new File("untitled\\a");

        //创建File对象表示压缩包放在哪里(压缩包的父级路径)
        File destParent=src.getParentFile();

        //创建File对象表示压缩包的路径
        File dest=new File(destParent,src.getName()+".zip");

        //创建压缩流关联压缩包
        ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(dest));

        //获取src里面的每一个文件,变成ZipEntry对象,放到压缩包中
        //重点

        /*
        * 参数一:数据源
        * 参数二:压缩流
        * 参数三:压缩包内部的路径
        * */
        toZip(src,zos,"");

        //释放资源
        zos.close();
    }

    public static void toZip(File src,ZipOutputStream zos,String name) throws IOException {
        //进入src文件夹
        File []files=src.listFiles();
        //遍历数组
        for (File file : files) {
            if(file.isFile()){
                //判断是文件,变成ZipEntry对象,放入压缩包当中
                ZipEntry entry=new ZipEntry(name+"\\"+file.getName());
                zos.putNextEntry(entry);
                //读取文件中的数据,写到压缩包
                FileInputStream fis=new FileInputStream(file);
                int b;
                while((b=fis.read())!=-1){
                    zos.write(b);
                }
                fis.close();
                zos.closeEntry();
            }
            else {
                //判断是文件夹,递归...
                toZip(file,zos,name+"\\"+file.getName());
            }
        }
    }
}

个人号推广

博客主页

朱道阳-CSDN博客

Web后端开发

https://blog.csdn.net/qq_30500575/category_12624592.html?spm=1001.2014.3001.5482

Web前端开发

https://blog.csdn.net/qq_30500575/category_12642989.html?spm=1001.2014.3001.5482

数据库开发

https://blog.csdn.net/qq_30500575/category_12651993.html?spm=1001.2014.3001.5482

项目实战

https://blog.csdn.net/qq_30500575/category_12699801.html?spm=1001.2014.3001.5482

算法与数据结构

https://blog.csdn.net/qq_30500575/category_12630954.html?spm=1001.2014.3001.5482

计算机基础

https://blog.csdn.net/qq_30500575/category_12701605.html?spm=1001.2014.3001.5482

回忆录

https://blog.csdn.net/qq_30500575/category_12620276.html?spm=1001.2014.3001.5482

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1926164.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

清华计算几何-ConvexHull(凸包)-求极点InTriangle/ToLeft Test

ConvexHull(凸包) 凸包是什么 凸包是计算几何一个非常基础核心的概念。我理解的凸包就是给定一个点集合, 最外围的点的包围体就是凸包。如下所示: 极点(ExtremityPoint) 给定的点集合中, 如果一个点存在一条直线, 让其他所有点都在于该直线的同一侧, 则该点为极点。 非极点 …

【Java--数据结构】栈:不仅仅是数据存储,它是编程的艺术

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 栈 栈的方法介绍 入栈push 出栈pop和 瞄一眼peek 判空isEmpty和判满isFull 模拟实现栈 push入栈 pop出栈和peek 测试 使用泛型实现栈 测试 使用链表实现栈&#xff08…

本地部署免费AI大模型+知识库

利用Ollama部署本地大模型 一:终端实现与大模型对话 1.去Ollama官网下载 https://ollama.com/download2.下载之后按照提示一步步安装即可 3.WinR, 输入cmd,打开命令行提示符 输入:ollama run llama3运行大模型 4.使用其他开源大模型,比如…

基于门控循环单元(GRU)的数据回归预测

代码原理 基于GRU(Gated Recurrent Unit)的数据回归预测通常涉及多输入单输出的情况。以下是简单的原理及流程: 数据准备: 准备多个时间序列作为输入特征,每个时间序列可以表示不同的变量或特征。准备一个目标变量作…

算法学习day12(动态规划)

一、不同的二叉搜索树 二叉搜索树的性质:父节点比左边的孩子节点都大;比右边的孩子节点都小; 由图片可知,dp[3]是可以由dp[2]和dp[1]得出来的。(二叉搜索树的种类和根节点的val有关) 当val为1时,左边是一定没有节点的…

写真图片视频打赏系统源码全开源无加密

这是一款开源的写真图片及视频打赏系统源码,顾名思义他可以做写真图片打赏站也可以做视频打赏站,支付对接了易支付,拥有独立代理后台,全部源码无加密,另外也可以配合付费进群使用。支付扣量、域名防洪这些基本的就不介…

基于信号处理的PPG信号滤波降噪方法(MATLAB)

光电容积脉搏波PPG信号结合相关算法可以用于人体生理参数检测,如血压、血氧饱和度等,但采集过程中极易受到噪声干扰,对于血压、血氧饱和度测量的准确性造成影响。随着当今社会医疗保健技术的发展,可穿戴监测设备对于PPG信号的质量…

修正版头像上传组件

修正版头像上传组件 文章说明核心源码展示运行效果展示源码下载 文章说明 在头像剪切上传一文中,我采用div做裁剪效果,感觉会有一些小问题,在昨天基于canvas绘制的功能中改进了一版,让代码变得更简洁,而且通用性相对高…

Linux的load(负载)

负载(load)是Linux机器的一个重要指标,直观了反应了机器当前的状态。 在Linux系统中,系统负载是对当前CPU工作量的度量,被定义为特定时间间隔内运行队列中的平均线程数。 Linux的负载高,主要是由于CPU使用、内存使用、10消…

[UTCTF2020]babymips

水一篇 32位 c写的,长得比较丑陋 进入sub-401164函数 V7的数据可以得到 unsigned char ida_chars[] {0x62, 0x6C, 0x7F, 0x76, 0x7A, 0x7B, 0x66, 0x73, 0x76, 0x50, 0x52, 0x7D, 0x40, 0x54, 0x55, 0x79, 0x40, 0x49, 0x47, 0x4D, 0x74, 0x19, 0x7B, 0x6A, 0x…

大数据之路 读书笔记 Day5 数据同步遇到的问题与解决方案

回顾 Day 4 数据同步Day 3 无线客户端的日志采集 1. 分库分表的处理 分库分表(Sharding)是数据库水平扩展的一种策略,当单个数据库的性能和存储能力无法满足应用需求时,可以采用分库分表来分散数据和查询负载。它通常包括两个方面…

钡铼4G无线RTU助力智慧能源发展实现电网远程调控

随着全球对清洁能源和高效能源管理的需求日益增长,智慧能源技术正逐渐成为推动可持续发展的重要驱动力。在这一背景下,钡铼4G无线远程终端单元正在为智慧能源的发展和电网的远程调控提供强有力的支持。 钡铼4G无线RTU:智慧能源的神经网络 钡…

数据恢复篇:适用于 Android 的恢复工具

正在摆弄 Android 设备。突然,您意外删除了一张或多张图片。不用担心,您总能找到一款价格实惠的照片恢复应用。这款先进的软件可帮助 Android 用户从硬盘、安全数字 (SD) 或存储卡以及数码相机中恢复已删除的图片。 Android 上文件被删除的主要原因 在获…

Blender使用(二)点线面基本操作

Blender使用之点线面 1.编辑模式 tab键进行切换,为了方便菜单调出,可以设置键位映射为拖动时的饼菜单。 设置好后,按住tab键移动鼠标(注意不要点击鼠标),即可弹出编辑菜单。 默认是点模式,在左上角可进行点线面的切换…

Linux系统OpenSSH出现漏洞(CVE-2024-6387)修复

CVE-2024-6387 是一个影响 OpenSSH 服务器(sshd)的严重远程代码执行(RCE)漏洞,它允许未经身份验证的攻击者在受影响的 Linux 系统上以 root 权限执行任意代码。此漏洞尤其危险,因为它可以在不需要任何用户交…

husky 和 lint-staged 构建代码项目规范

目录 前言 最简单的方法 过 scripts 来解决如果检测工具多,需要多次处理 通过 husky(哈士奇)来解决容易遗忘的问题 1. 安装 2. husky init 3. 试一试​ lint-stadge 只 lint 改动的 1. 安装 2. 修改 package.json 配置 3. 添加 npm 脚本: 4.使用 Husky…

ETL数据集成丨主流ETL工具(ETLCloud、DataX、Kettle)数据传输性能大PK

目前市面上的ETL工具众多,为了方便广大企业用户在选择ETL工具时有一个更直观性能方面的参考值,我们选取了目前市面上最流行的三款ETL工具(ETLCloud、DataX、Kettle)来作为本次性能传输的代表,虽然性能测试数据有很多相…

类和对象 中篇

类和对象 中篇 ​ 在上篇中,我们介绍了类的基础部分,本篇我们讲解C类的六大默认成员函数 ​ 所谓默认成员函数,就是我们不写编译器也会自动生成,自动调用的函数。而自动生成的函数对内置类型的成员不会处理(有些高版本编译器会…

FreeRTOS 入门 知识

什么是FreeRTOS FreeRTOS 是一个轻量级的实时操作系统(RTOS),由 Richard Barry 在 2003 年开发,并且由亚马逊的 FreeRTOS 项目(一个由 Amazon Web Services (AWS) 支持的开源项目)进一步推动和发展。FreeR…

python开发遇到的坑汇总

文章目录 1.点击导入操作,所有配置全没了 1.点击导入操作,所有配置全没了 在 PyCharm 中,如果你遇到了点击导入(import)操作后,项目似乎进行了重新安装或重新部署的情况,这通常不是由简单的导入…