Java---高级流

news2024/11/15 10:26:45

目录

一、转换流

(1)指定的字符集读写数据

二、序列化流和反序列化流

三、解压缩流和压缩流

(1)解压缩流

 (2)压缩流

一:压缩文件

二:压缩文件夹


注:本文并未介绍Java中的所有高级流,只介绍了三种!

一、转换流

转换流就是转换,它可以使字节流转换成字符流,也可以将字符流转换成字节流。
在读数据时InputStreamReader,就是将字节流转换成字符流
写数据时OutputStreamWriter,就是将字符流转换成字节流
他们的作用可以指定字符集读写数据,字节流可以使用字符流中的方法

(1)指定的字符集读写数据

public class exe_one {
    public static void main(String[] args) throws IOException {
      File src=new File("D:\\java\\8.txt");
      duqu(src,"GBK");
      xie(src,"GBK");
   }
   public static void duqu(File src,String charset) throws IOException {
        //读取src路径的文件,charset是指定的字符集

       //转换流
       InputStreamReader inputStreamReader=new InputStreamReader(new FileInputStream(src),charset);
       int b;
       while((b=inputStreamReader.read())!=-1){
           System.out.print((char)b);
       }
       inputStreamReader.close();
   }
   public static void xie(File src,String charset) throws IOException {
        //写到src文件,charset是指定的字符集
        OutputStreamWriter outputStreamWriter=new OutputStreamWriter(new FileOutputStream(src),charset);
        outputStreamWriter.write("一加一等于100");
        outputStreamWriter.close();
   }
}

 

二、序列化流和反序列化流

序列化流:ObjectOutputStream,它可以把Java中的对象
写到本地文件中,比如具体实例中游戏的存档,如果单纯将数据写进去,
那么用户就可以看懂并进行修改,序列化的作用就是将对象写进本地文件中,
并且是一串奇怪的字符,别人看不懂。
同时要注意一个小细节,使用序列化流保存文件一定要记得将javabean类实现Serializable接口

反序列化流:ObjectInputStream他的作用就是将序列化到本地文件中的对象读取到程序中

public class exe_one {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        File src=new File("D:\\java\\7.txt");
      //xulie(src);
      fanxulie(src);
   }
   public static void xulie(File src) throws IOException {
        //序列化流将对象保存到本地文件中
       Student s=new Student("张三",19);
       ObjectOutputStream outputStream=new ObjectOutputStream(new FileOutputStream(src));
       outputStream.writeObject(s);
       outputStream.close();
   }
   public static void fanxulie(File src) throws IOException, ClassNotFoundException {
        //反序列化
       ObjectInputStream o=new ObjectInputStream(new FileInputStream(src));
       Student s= (Student) o.readObject();
       System.out.println(s.name);
       o.close();
   }
}

 

三、解压缩流和压缩流

对于解压缩流和压缩流的定义其实很简单,就是解压和压缩

(1)解压缩流

解压本质:就是吧每一个ZipEntry按照层级拷贝到本地另外一个文件夹中
要注意这里的解压缩的格式后缀名一定要是zip,其他Java无法识别。
 

解压缩流基本代码:

//将一个a压缩包解压

public class exe_one {
    public static void main(String[] args) throws IOException {
       File src=new File("D:\\java\\a.zip");
       File dest=new File("D:\\java");
       jieyasuo(src,dest);
    }
    public static void jieyasuo(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()){
                //是文件夹
                    File fiel=new File(dest,entry.toString());
                    fiel.mkdirs();
            }
            else{
                //是文件
                //开始将压缩包中的数据写到指定的位置上去
                FileOutputStream outputStream=new FileOutputStream(new File(dest,entry.toString()));
                int b;
                while((b=zip.read())!=-1){
                    outputStream.write(b);
                }
                outputStream.close();
                zip.closeEntry();
            }
        }
        zip.close();
    }

}

 (2)压缩流

一:压缩文件

public class exe_one {
    public static void main(String[] args) throws IOException {
       File src=new File("D:\\C\\ssss.txt");
       File dest=new File("D:\\C");
       jieyasuo(src,dest);
    }
    public static void jieyasuo(File src,File dest) throws IOException {
        //将ssss.txt压缩成zip格式
        //创建压缩关流
        ZipOutputStream zipOutputStream=new ZipOutputStream(new FileOutputStream(new File(dest,"ssss.txt")));
        //创建zipEntry对象,表示压缩包中的每一个文件
        ZipEntry entry=new ZipEntry("ssss.txt");
        //将ZipEntry对象放到压缩包中
        zipOutputStream.putNextEntry(entry);
        //将src文件中的数据写到压缩包中
        FileInputStream fileInputStream=new FileInputStream(src);
        int b;
        while((b=fileInputStream.read())!=-1){
            zipOutputStream.write(b);
        }
        zipOutputStream.closeEntry();
        zipOutputStream.close();

    }

}

二:压缩文件夹

具体代码如下:

public class exe_one {
    public static void main(String[] args) throws IOException {
        File src=new File("D:\\java\\a");
        File destparent=src.getParentFile();//得到压缩文件的父级路径
        File dest=new File(destparent,src.getName()+".zip");

        //创建压缩关联包
        ZipOutputStream zipOutputStream=new ZipOutputStream(new FileOutputStream(dest));
        //获取src中的每个文件以及文件夹变成ZipEntry对象
        yasuo(src,zipOutputStream,src.getName());
        zipOutputStream.close();
    }
   public static void yasuo(File src,ZipOutputStream zipOutputStream,String name) throws IOException {
       File[] files=src.listFiles();
       for(File file:files){
           if(file.isFile()){
               //是文件
               //变成ZipEntrry对象,将数据压缩
               ZipEntry entry=new ZipEntry(name+"\\"+file.getName());//压缩到的路径
               zipOutputStream.putNextEntry(entry);
               //读取文件中的数据,写到压缩包中
               FileInputStream inputStream=new FileInputStream(file);
               int b;
               while((b=inputStream.read())!=-1){
                   zipOutputStream.write(b);
               }
               inputStream.close();
               zipOutputStream.closeEntry();
           }
           else{
               //文件夹压缩
               //递归压缩
               yasuo(file,zipOutputStream,name+"\\"+file.getName());
           }
       }
   }
}

 

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

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

相关文章

CVE-2023-24055 KeePass信息明文传输漏洞复现

前言 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 如果文章中的漏洞出现敏感内容产生了部分影响,请及时联系作者,望谅解。 一、漏洞描述 漏洞简述 Kee…

STM32 SystemInit()函数学习总结

拿到程序后如何看系统时钟?User文件夹——system_stm32f4xx程序,先找systemcoreclock(系统时钟)但是这里这么多个系统时钟应该如何选择?点击魔法棒,然后点击C/C可以看到define的是F40_41XXX.USE这一款 ,对应着就找出了…

R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作

基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作技术应用第一章、理论篇以问题导入的方式,深入掌握原理基础什么是MaxEnt模型?MaxEnt模型的原理是什么?有哪些用途?MaxEnt运行需要哪些输入文件…

对云原生集群网络流量可观测性的一点思考

问题背景 在云原生技术的广泛普及和实施过程中,笔者接触到的很多用户需求里都涉及到对云原生集群的可观测性要求。 实现集群的可观测性,是进行集群安全防护的前提条件 。而在可观测性的需求中,集群中容器和容器之间网络流量的可观测性需求是…

别错过!4C首发直播,上届全国总冠军带你入门赛题

和志同道合的伙伴并肩作战,用指尖敲出奇思妙想,飞桨黑客马拉松PaddlePadddle Hackathon第四期全新升级,开放报名啦! 玩技术,秀操作!这是一场高手云集的开发者盛会。四大赛道:核心框架开源贡献&…

Python每日一练(20230221)

目录 1. 不同路径 II 2. 字符串转换整数 (atoi) 3. 字符串相乘 1. 不同路径 II 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中…

一文讲明Hystrix熔断器

前言 解决问题: 主要防止服务器集群发生雪崩, 起到对服务器的保护作用 GitHub地址:https://github.com/Netflix/Hystrix/wiki 1 Hystrix是什么 1.1 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不…

Milvus 群星闪耀时|又一个小目标达成 :社区正式突破 15,000 星!

如果把 Milvus 看作开源世界中的一束微光,那用户便是无垠宇宙中点点闪烁的星光。用户每一次点亮 star 之时,Milvus 就会迸发出更加耀眼的光芒。不知不觉,已有数以万计的 star 为 Milvus 而亮。2022 年 4 月,Milvus 在 GitHub 的 …

【C++】-- C++11基础常用知识点(下)

上篇: 【C】-- C11基础常用知识点(上)_川入的博客-CSDN博客 目录 新的类功能 默认成员函数 可变参数模板 可变参数 可变参数模板 empalce lambda表达式 C98中的一个例子 lambda表达式 lambda表达式语法 捕获列表 lambda表达底层 …

【Pytorch项目实战】基于PaddlenHub的口罩检测与语音提示

文章目录一、项目思路二、环境配置1.1、PaddlenHub模块(飞桨预训练模型应用工具)(1)预训练模型:pyramidbox_lite_mobile_mask(2)face_detection人脸检测模型(默认为 pyramidbox_lite…

TCP的三次握手、四次挥手

文章目录前言一、一些重要字段的含义二、TCP总括图三、三次握手详细过程1.第一次握手2.第二次握手3.第三次握手三次握手小结4.为什么必须要进行三次握手,两次或四次就不行四、四次挥手1.第一次挥手2.第二次挥手3.第三次挥手4.第四次挥手四次挥手简述前言 一个TCP的…

MySQL中自带的数据库表相关介绍

mysql的自带数据库表主要有以下几个: (1)information_schema (2)performance_schema (3)mysql (4)sys (5)可能存在空数据库test 一、informa…

预告|2月25日 第四届OpenI/O 启智开发者大会昇腾人工智能应用专场邀您共启数字未来!

如今,人工智能早已脱离科幻小说中的虚构想象,成为可触及的现实,并渗透到我们的生活。随着人工智能的发展,我们正在迎来一个全新的时代——数智化时代。数据、信息和知识是这个时代的核心资源,而人工智能则是这些资源的…

【TensorFlow 】查看Tensorflow和python对应版本、将现有的TensorFlow更新到指定的版本

1、查看Tensorflow和python对应版本 1.1这里我是在TensorFlow官方网址产看的 1、打开官方网址 https://pypi.org/project/tensorflow/1.1.0rc2/#files但是这个网址好像打不开,点击会出现这样 问题不大 输入Tensorflow然后点击搜索,就会跳转到https://p…

[蓝桥杯 2015 省 B] 移动距离

蓝桥杯 2015 年省赛 B 组 H 题题目描述X 星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为 1,2,3,⋯ 。当排满一行时,从下一行相邻的楼往反方向排号。比如:当小区排号宽度为 6 时,开始情形如下:我们的…

复旦发布国内首个类ChatGPT模型MOSS,和《流浪地球》有关?

昨晚,复旦大学自然语言处理实验室邱锡鹏教授团队发布国内首个类ChatGPT模型MOSS,现已发布至公开平台https://moss.fastnlp.top/ ,邀公众参与内测。 MOSS和ChatGPT一样,开发的过程也包括自然语言模型的基座训练、理解人类意图的对…

XXL-JOB 分布式任务调度平台

1.什么是XXL-JOB XXL-JOB 是由国人许雪里开发的一个 开源的轻量级分布式任务调度平台。 学习简单、轻量级、易扩展,开箱即用,现已开放源代码并接入200多家公司线上产品线 2.XXL-JOB设计思想 a.将调度行为抽象为调度中心公共平台,而平台本身不承担业务…

[oeasy]python0089_大型机的衰落_Dec小型机崛起_PDP_VAX网络

编码进化 回忆上次内容 上次 回顾了 计算机存储单位的演变 最小的读写单位 是 bit 8-bit 固定下来 成为了字节(Byte) 位数容量8-bit1Byte1024Byte1 KB1024 KB1 MB1024 MB1 GB1024 GB1 TB 存储字符时 第1位 是 标志位后7位 是 ascii具体的值 可以用 1Byte 存储 计算机之间 …

Java:什么是异常?什么是异常处理?

Java中的异常处理不是一个容易的话题。初学者很难理解,即使是经验丰富的开发人员也可以花几个小时讨论应该如何抛出或处理哪些Java异常。这就是为什么大多数开发团队都有自己的一套关于如何使用它们的规则。如果你是一个团队的新手,你可能会惊讶于这些规…

HR:你会Python数据分析吗?

之前看到一个段子: 以前去面试,HR会问你“精通office吗?” 现在去面试,HR会问你“会Python数据分析吗?” 图片来源:网络 大数据时代,无论是数据分析师、研发,到运营、市场、产品经…