【从入门到起飞】JavaSE—IO高级流(2)(打印流,压缩流)

🎊专栏【JavaSE】
🍔喜欢的诗句:天行健,君子以自强不息。
🎆音乐分享【如愿】
🎄欢迎并且感谢大家指出小吉的问题🥰

文章目录

  • 🎄打印流
    • 🛸字节打印流
    • 🛸字符打印流
  • 🎄解压缩流
    • ✨解压的本质
    • 🛸代码实现
  • 🎄压缩流
    • 🛸压缩单个文件
    • 🛸压缩文件夹

输入/输出流(I/O流)是用于处理输入和输出操作的数据流。在计算机编程中,I/O流通常用于从文件、网络连接、内存或其他来源读取数据,或将数据写入这些地方。

I/O流可分为输入流和输出流:

输入流:用于从数据源(如文件、键盘、网络连接等)读取数据。
输出流:用于向数据目标(如文件、屏幕、网络连接等)写入数据。
在许多编程语言中,都提供了用于处理I/O流的标准库或模块,开发人员可以使用这些工具来进行文件读写、网络通信等操作。I/O流的概念也适用于各种类型的数据处理,包括文本数据、二进制数据等。
在这里插入图片描述

🎄打印流

打印流一般指PrintStream,PrintWriter两个类
在这里插入图片描述

🛸字节打印流

字节

在这里插入图片描述

字节流底层没有缓冲区,开不开启自动刷新都一样

在这里插入图片描述

🛸字符打印流

字符

在这里插入图片描述

字符流底层有缓冲区,想要自动刷新需要手动开启

在这里插入图片描述

🎄解压缩流

要解压的压缩包最好是.zip

✨解压的本质

把压缩包里面的每一个文件或者文件夹读取出来,按照层级拷贝到目的地中

🛸代码实现

我们在G盘创建一个压缩包aaa.zip,里面包含了文件夹a,文件夹里面有a.txt
在这里插入图片描述
我们运行下面的代码,来验证解压效果

package com.itheima.myzipstream;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;/*
*   解压缩流
*
* */
public class ZipStreamDemo1 {public static void main(String[] args) throws IOException {//1.创建一个File表示要解压的压缩包File src = new File("G:\\aaa.zip");//2.创建一个File表示解压的目的地File dest = new File("G:\\");//调用方法unzip(src,dest);}//定义一个方法用来解压public static void unzip(File src,File dest) throws IOException {//创建一个解压缩流用来读取压缩包中的数据ZipInputStream zip = new ZipInputStream(new FileInputStream(src));//要先获取到压缩包里面的每一个zipentry对象//表示当前在压缩包中获取到的文件或者文件夹ZipEntry entry;while((entry = zip.getNextEntry()) != null){System.out.println(entry);if(entry.isDirectory()){//文件夹:需要在目的地dest处创建一个同样的文件夹//调用toString方法,变为字符串File file = new File(dest,entry.toString());file.mkdirs();}else{//文件:需要读取到压缩包中的文件,并把他存放到 目的地dest文件夹 中(按照层级目录进行存放)//new出来的文件路径和之前的一样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();}
}

解压成功了
在这里插入图片描述

🎄压缩流

🛸压缩单个文件

package com.itheima.myzipstream;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;public class ZipStreamDemo2 {public static void main(String[] args) throws IOException {/**   压缩流*      需求:*          把D:\\a.txt打包成一个压缩包* *///1.创建File对象表示要压缩的文件File src = new File("D:\\a.txt");//2.创建File对象表示压缩包的位置File dest = new File("D:\\");//3.调用方法用来压缩toZip(src,dest);}/**   作用:压缩*   参数一:表示要压缩的文件*   参数二:表示压缩包的位置* */public static void toZip(File src,File dest) throws IOException {//1.创建压缩流关联压缩包//des是父级路径//a.zip是子级路径ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File(dest,"a.zip")));//2.创建ZipEntry对象,表示压缩包里面的每一个文件和文件夹//参数:压缩包里面的路径ZipEntry entry = new ZipEntry("aaa\\bbb\\a.txt");//3.把ZipEntry对象放到压缩包当中zos.putNextEntry(entry);//4.把src文件中的数据写到压缩包当中FileInputStream fis = new FileInputStream(src);int b;while((b = fis.read()) != -1){zos.write(b);}zos.closeEntry();zos.close();}
}

🛸压缩文件夹

package IODemo4;import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;public class Demo2 {public static void main(String[] args) throws IOException {//创建File对象表示要压缩的文件夹File src=new File("G:\\aaa");//创建压缩包需要被放到哪里(压缩包的父级路径)File destParent = src.getParentFile();//G:\\//创建File对象表示压缩包的路径File dest=new File(destParent,src.getName()+".zip");//创建压缩流关联压缩包ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(dest));//获取src里面的每一个文件,变成ZipEntry对象,放到压缩包里面toZip(src,zos,src.getName());//释放资源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());}}}
}

大家对于这篇文章如果有问题,欢迎在评论区进行讨论

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++算法:全 O(1) 的数据结构

题目 请你设计一个用于存储字符串计数的数据结构,并能够返回计数最小和最大的字符串。 实现 AllOne 类: AllOne() 初始化数据结构的对象。 inc(String key) 字符串 key 的计数增加 1 。如果数据结构中尚不存在 key ,那么插入计数为 1 的 key…

SQL note2:DIsks and Files

目录 1、内存和磁盘 2、磁盘API 3、磁盘结构 4、访问磁盘页面 5、磁盘 vs SSD 5、磁盘空间管理 6、Files, Pages, Records 7、选择文件类型 8、堆文件 1)链表实现 2)页面目录实现 9、排序文件 10、关于计算标题页的注意事项 11、记录类型 …

Ubuntu18.04.6安装qt5.7.1(超级详细教程)

目录 1、下载对应Linux版本的qt 2、安装完qt,可能也要安装下对应的编译工具 1、下载对应Linux版本的qt (1)准备安装的是qt5.7.1:qt-opensource-linux-x64-5.7.1.run (2)在虚拟机进入存放qt安装包的目录…

cesium如何实现区域下钻

首先,这里讲一下数据源,数据源是拷贝的DataV.GroAtlas里的数据,这里整合了一下之前发的区域高亮的代码来实现的,单击左键使得区域高亮,每次点击都移除上一次点击的模块,双击左键,实现区域下钻并…

多级缓存之缓存同步

缓存数据同步的常见方式有三种: 设置有效期:给缓存设置有效期,到期后自动删除。再次查询时更新 优势:简单、方便缺点:时效性差,缓存过期之前可能不一致场景:更新频率较低,时效性要…

数据库timestamp遇到的小问题

在执行一个简单的更新语句时,当前修改的那一条数据的创建时间create_time会随着更新而变化 update read_feedback SET READ_STATUS ?, READ_ORG_NO ?, READ_ORG ?, READ_USER_NO ?, READ_USER ?, READ_TIME ? where ID ? 打了断点排查也没看到对cr…

让AI拥有人类的价值观,和让AI拥有人类智能同样重要

编者按:2023年是微软亚洲研究院建院25周年。25年来,微软亚洲研究院探索并实践了一种独特且有效的企业研究院的新模式,并以此为基础产出了诸多对微软公司和全球社会都有积极影响的创新成果。一直以来,微软亚洲研究院致力于创造具有…

推荐系统笔记--Swing模型的原理

1--Swing模型的引入 在 Item CF 召回中,物品的相似度是基于其受众的交集来衡量的,但当受众的交集局限在一个小圈子时,就会误将两个不相似的物品定义为相似; Swing 模型引入用户的重合度来判断两个用户是否属于一个小圈子&#xff…

基于检索增强生成的LLM应用开发实战【】

大型语言模型(LLM)无疑改变了我们与信息交互的方式。 然而,对于我们可以向他们提出的要求,它们也有相当多的限制。 LLM(例如 Llama-2-70b、gpt-4 等)仅了解他们接受过训练的信息,当我们要求他们…

C语言求数组中出现次数最多的元素

一、前言 遇到一个需求,需要求数组中出现次数最多的元素,查找了一些资料,结合自己的思路,编写了程序并验证。 只考虑元素为非负整数的数组,如果有出现次数相同的元素,则返回较小元素。 二、编程思路 以数…

使用order by 排序后的是10 6 7 8 9 而不是 6 7 8 9 10?

问题 sql order by 排序后的为什么 是10 6 7 8 9 而不是 6 7 8 9 10? 思路 在 SQL 中,ORDER BY 默认的排序方式是升序(从小到大)。所以,如果您简单地使用 ORDER BY 对某个列进行排序,它会将数字按照升序排列&#…

亚马逊鲲鹏系统可全自动化批量操作亚马逊买家号

亚马逊鲲鹏系统可以注册买家号、智能养号、自动下单、自动留评、QA等,是一款从注册到下单于一体的软件。 如果想要自动化注册,那么准备好账号所需要的邮箱、ip、手机号之后就可以进行自动注册了,注册时可以自动输入账号密码信息、自动接收验证…