IO流,,

news2024/12/25 10:35:11

标题

  • 1. 文件基础知识
    • 1.1 文件基础知识-文件流
    • 1.2 创建文件的3种方式(不是目录)
    • 3. 获取文件的相关信息
    • 4. 删除文件及创建多级(一极)目录
  • 2. IO流原理及流的分类
    • 2.1 InputStream 字节输入流
    • 2.1.1 FileInputStream
    • 2.1.2 FileOutStream
      • 2.1.3 拷贝文件
    • 2.2 FileReader
    • 2.3 FileWriter
    • 2.4 节点流与处理流
      • 2.4.1 处理流设计模式
      • 2.4.2 BufferedReader
      • 2.4.3 BufferedWriter
      • 2.4.4 Buffered字符流拷贝
    • 2.5 BufferedInputStream
    • 2.6 BufferedOutputStream
    • 2.6.1 Buffered字节流拷贝
    • 2.7 对象流
      • 2.7.1 ObjectOutputStream
      • 2.7.2 ObjectInputStream
      • 2.7.3 对象流使用细节
    • 2.8 标准输入输出流
    • 2.9 转换流
      • 2.9.1 InputStreamReader
      • 2.9.2 OutputStreamWriter
    • 3.0 打印流
      • 3.1 字节打印流
      • 3.2 字符打印流
    • 3.1 Properties类

1. 文件基础知识

1.1 文件基础知识-文件流

  1. 文件基础知识-文件流:文件在程序中是以流的形式来操作的
    在这里插入图片描述
    在这里插入图片描述

1.2 创建文件的3种方式(不是目录)

  1. 根据路径创建一个File对象
    在这里插入图片描述
  2. 根据父目录文件+子路径创建
    在这里插入图片描述
  3. 根据父目录+子路径传创建
    在这里插入图片描述

3. 获取文件的相关信息

File类图在这里插入图片描述
在这里插入图片描述

4. 删除文件及创建多级(一极)目录

  1. 1 删除文件在这里插入图片描述
    4.2 删除目录 : 目录可以当作一个文件
    在这里插入图片描述
    4.3 创建多级目录用mkdirs
    在这里插入图片描述

2. IO流原理及流的分类

  • IO流原理
    输入input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中;
    输出output:将程序(内存)数据输出到磁盘、光盘等存储设备中;

  • 流的分类
    操作数据单位不同分为:字节流(8 bit)对于二进制文件,字符流(按字符) 对应文本文件
    数据流的流向不同分为:输入流、输出流
    流的角色不同分为:节点流、处理流/包装流

(抽象基类)字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter

在这里插入图片描述

2.1 InputStream 字节输入流

InputStream抽象类是所有类字节输入流的超类;

在这里插入图片描述

2.1.1 FileInputStream

  1. 演示读取文件(单个字节的读取,效率比较低)
    在这里插入图片描述
    在这里插入图片描述
  2. 多个字节的读取在这里插入图片描述

2.1.2 FileOutStream

在这里插入图片描述

  1. 将数据写入文件中 (写入单个字节),如果文件不存在,则创建文件;
    在这里插入图片描述
    2.写入字符串(先把字符串转换成字节数组)
    在这里插入图片描述
    3.1 写入字符串时,可以定义起始位置
    write(byte b[], int off, int len); off是偏移量,len是写入的个数
    在这里插入图片描述
  2. 将数据写入文件时,如果希望写入文件的末尾而不是开头
    在这里插入图片描述
    在这里插入图片描述

2.1.3 拷贝文件

在这里插入图片描述
可以拷贝图片,也可以拷贝音乐;
在这里插入图片描述

2.2 FileReader

在这里插入图片描述

单个字符读取
在这里插入图片描述
多个字符读取
在这里插入图片描述

2.3 FileWriter

在这里插入图片描述

细节

  1. 如果不指定true,会默认覆盖文件的内容。
    在这里插入图片描述
  2. FileWriter使用过后,一定要关闭(close)或者刷新(flush),否则数据流不能写入到文件! 原因:
    源码如下:Force Step Into
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.4 节点流与处理流

  • 节点流可以从一个特定的数据源读写数据,如FileReader、FileWriter
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 包装流(处理流) 是“连接”在已存在的流(节点流或处理流)之上,如BufferedReader、BufferedWriter;
    在这里插入图片描述

2.4.1 处理流设计模式

  • 节点流和处理流的区别和联系
  1. 节点流是底层流/低级流,直接跟数据源相接;
  2. 处理流(包装流)包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出。
  3. 处理流(也叫包装流)对节点流进行包装,使用了修饰器设计模式,不会直接与数据源相连;【模拟修饰器设计模式】。
  • 处理流的功能主要体现在以下两个方面:
  1. 性能的提高:主要以增加缓冲的方式来提高输入输出的效率;
  2. 操作的便捷:处理流可能提供了一系列便捷的方法来一次输入输出大批量的数据,使用更加灵活方便;
    6.
    在这里插入图片描述
    6.
    在这里插入图片描述
    在这里插入图片描述

2.4.2 BufferedReader

  1. BufferedReader和BufferWriter属于字符流,是按照字符来读取数据的;
    在这里插入图片描述
    在这里插入图片描述
  2. 关闭处理流的时候,只需要关闭外层流即可;源码:
    3.
    in就是我们传入的new FileReader(filePath)i;在这里插入图片描述

2.4.3 BufferedWriter

  1. BufferedWriter构造器不支持传入一个boolean参数,所以在字节流处添加;
    在这里插入图片描述
    在这里插入图片描述

2.4.4 Buffered字符流拷贝

BufferedReader和BufferedWriter只能操作字符,字符流只能读取文本;
不能读取二进制文件【音频,视频,文档,图片】,造成文件损坏;

在这里插入图片描述

2.5 BufferedInputStream

在这里插入图片描述

2.6 BufferedOutputStream

在这里插入图片描述

2.6.1 Buffered字节流拷贝

字节流可以操作二进制文件,但可以操作文本文件吗?可以:不要把汉字的字节拆开就不会乱码!

在这里插入图片描述

2.7 对象流

在这里插入图片描述
在这里插入图片描述

  • 序列化和反序列化
    1. 序列化就是在保存数据的同时,还能保存数据的类型;
    2. 反序列化就是在恢复数据时,恢复数据的值和数据类型;
    3. 需要让某个对象支持序列化机制,就必须让其类是可序列化的;为了让某类是可序列化的,则必须让其类下面两个接口之一:
      • 实现Serializable接口,这是一个标记接口,没有方法;
      • 实现Externalizable接口,这个接口内有方法,需要实现,所以一般不采用;

2.7.1 ObjectOutputStream

使用ObjectOutputSteam序列化基本数据类型和一个Dog对象(age),并保存到data.txt文件中
在这里插入图片描述
在这里插入图片描述

2.7.2 ObjectInputStream

使用ObjectInputStream读取data.txt并反序列化恢复文件;
在这里插入图片描述
在这里插入图片描述

2.7.3 对象流使用细节

  1. 读写顺序要一致;
  2. 要求序列化或反序列化对象,需要实现Serializable;
  3. 序列化的类中建议添加SerialVersionUID,以提高版本的兼容性;
  4. 序列化对象时,默认将里面所有的属性都进行序列化,除了static和transient修饰的成员;
  5. 序列化对象时,要求里面属性的类型也需要实现序列化接口;
  6. 序列化具备可继承性,也就是如果某一个类实现了序列化,那么它的子类默认实现序列化;
    在这里插入图片描述

2.8 标准输入输出流

在这里插入图片描述

2.9 转换流

2.9.1 InputStreamReader

InputStreamReader是Reader的子类,可以将InputStream(字节流)包装成Reader(字符流)
读取文件内容默认是按照utf-8处理,如果把文件编码改成gbk,那么读取文件时就会出现中文乱码,这时需要用到转换流
在这里插入图片描述
在这里插入图片描述

2.9.2 OutputStreamWriter

OutputStreamWriter是Writer的子类,实现将OutputStream(字节流)包装成Writer(字符流);
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

当处理纯文本数据时,如果使用字符流效率更高,并且可以有效解决中文问题,所以建议将字节流转换成字符流

3.0 打印流

打印流只有输出流,没有输入流

3.1 字节打印流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 字符打印流

在这里插入图片描述
在这里插入图片描述

3.1 Properties类

  • 配置文件的读取写入☞传统方案
    在这里插入图片描述
  • 引入Properties

Properties是Hashtable的子类,配置文件的格式:
键=值
键=值
键值对不需要有空格,值不需要用引号括起来,默认是String

load加载配置文件的键值对到Properties对象
list将数据显示到指定设备
getProperty(key)根据建获取值(键、值均是String类型)
get(key)根据建获取值(返回Object对象)
setPropertiy(key,value)设置键值对到Properties对象, 没有key相当于添加
store将Properties中的键值对存储到配置文件,在idea中,保存信息到配置文件,如果含有中文,则会将汉字存储为unicode码

在这里插入图片描述
get(key)返回Object类型的对象
get()方法使用
在这里插入图片描述
在这里插入图片描述

Properties父类是Hashtable,底层是Hashtable
setProperties()底层源码是Hashtable中的put方法
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

MyCat教程【mysql主从复制实现】

单个mysql数据库在处理业务的时候肯定是有限的,这时我们扩展数据库的第一种方式就是对数据库做读写分离(主从复制),本文我们就先来介绍下怎么来实现mysql的主从复制操作。 1. 读写分离 原理:需要搭建主从模式,让主数…

Python实现房产数据分析与可视化 数据分析 实战

Python库的选择 话说,工欲善其事,必先利其器,虽然我们已经选择Python来完成剩余的工作,但是我们需要考虑具体选择使用Pytho的哪些利器来帮助我们更快更好地完成剩余的工作。 我们可以看一下,在这个任务中&#xff0c…

elasticsearch global 、 filters 和 cardinality 聚合

文章目录1. 背景2、解释1、global2、filters3、cardinality3、需求4、前置条件4.1 创建mapping4.2 准备数据5、实现3的需求5.1 dsl5.2 java 代码5.3 运行结果6、实现代码7、参考文档1. 背景 此处将单记录一下 global 、 filters和cardinality的聚合操作。 2、解释 1、global…

C++学习笔记(十八)——stack和queue

stack stack的介绍 stack接口的介绍 queue queue的介绍 queue接口的介绍 stack stack的介绍 stack是一种先进后出的容器. stack是一种容器适配器,专门用在具有后进先出(last-in first-out)操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作.stack是作…

Java——封装——Encapsulation

封装什么是封装访问权限修饰符导入import一个包package?Static到底是什么面向对象的三大特征:封装、继承、多态。今天我们来浅谈一下封装。什么是封装 我们不用那么专业那么难懂的语言讲解,我们就走一波野路子:封装就是指用priva…

理想汽车季报图解:营收93亿运营亏损21亿 沈亚楠卸任总裁职务

雷递网 雷建平 12月9日理想汽车(纳斯达克:LI;香港交易所:2015)今日公布财报。财报显示,理想汽车2022年第三季度营收93.4亿元(13.1亿美元),较上年同期的77.8亿元增长20.2%…

【考研数据】一.2020年BJTU计算机学院考研录取数据分析

欢迎订阅本专栏:《北交计算机复试经验》 订阅地址:https://blog.csdn.net/m0_38068876/category_12110003.html 【考研数据】一.2020年BJTU计算机学院考研录取数据分析【考研数据】二.2021年BJTU计算机学院考研录取数据分析【考研数据】三.2022年BJTU计算机学院考研录取数据分…

vue.js:父子组件的实训案例watch实现

作业需求 需求1:定义两个输入框,通过输入框输输入的值改变页面显示的值需求2:改变第一个输入框的值的同时使得第二个输入框的值变为100倍并显示需求3:改变第二个输入框的值的同时使得第一个输入框的值变为1/100并显示用watch实现…

Redis 特性。

Remote Dict Serve 分类 实时同步数据 要求缓存中的数据必须与db中的数据保持一致,如何保证,只要DB发生了变化,缓存中的数据立即消息 阶段性缓存为了缓存数据 添加了生存时长属性 Redis 的特性。 性能极高 读的速度 11w/s 写的速度 8w次/s…

10.spring源码之registerListeners()

1. 准备 ApplicationEvent: 事件对象,Spring事件驱动模型中的对象源,继承JDK EventObject,通过在发布事件时通过EventObject.source字段携带事件相关的数据。 ApplicationListener: 应用监听器,负责监听事件对象是否有发生变化&a…

学习Java8 Stream流,让我们更加便捷的操纵集合

1. 概述 本篇文章会简略的介绍一下 Lambda 表达式,然后开启我们的正题 Java8 Stream 流,希望观众老爷们多多支持,并在评论区批评指正! Java8 的 Stream 流使用的是函数式编程模式。它可以被用来对集合或数组进行链状流式的操作,…

推荐系统基本问题及系统优化路径

省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2022年10月份热门报告盘点大规模推荐类深度学习系统的设计实践.pdf荣耀推荐算法架构演进实践.pdf推荐系统在腾讯游戏中的应用实践.pdf清华大学256页PPT元宇宙研究报告.pdf&…

产品设计杂感

概述 前面多篇文章提过我近一年以来几乎是一个人在负责一款数据产品,一款公司内部使用的报表开发工具。市面上的类似产品如Tableau,QuickBI等。工作角色(职责)包括:后端开发,前端开发,功能测试…

STM32 bootloader简单实现的验证

目录 背景知识 STM32的启动模式 Flash memory的大小 实验验证 分区分配 bootloader代码 systeminit 背景知识 STM32的启动模式 STM32有三种启动模式, 这里验证的bootloader是通过Flash memory启动方式, 使用STM32内置的Flash,其首地址是0x08000000,一般我们…

[论文阅读] 颜色迁移-梯度保护颜色迁移

[论文阅读] 颜色迁移-梯度保护颜色迁移 文章: [Gradient-Preserving Color Transfer], [代码未公开] 本文目的: 如题所示为梯度保护的颜色迁移方法. 1-算法原理 人类的视觉系统对局部强度差异比强度本身更敏感, 因而, 保持颜色梯度是场景保真度的必要条件, 因而作者认为: 一…

python+django留守儿童爱心捐赠网站

开发语言:Python 框架:django Python版本:python3.7.7 数据库:mysql 数据库工具:Navicat11 开发软件:PyCharm 目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究…

城市应急处置系统实施目标

针对需求分析中的业务目标,本系统在实施中,通过 “两个工作台七个子系统”的目标来支撑业务目标,满足系统延续需求、功能需求、制度建设需求、平台拓展需求和技术性能需求。 具体分为事前6个子系统、事中2个工作台和事后1个子系统这三方面目标…

002:UIView

UIView简介: UIView作为最基础的视图类,起着管理屏幕上一定区域内容展示的作用。作为各种视图的父类,提供相应的基础能力。 外观、渲染和动画。相应区域内的事件。布局和管理子视图。 布局: 设置自身大小(size&…

[附源码]Python计算机毕业设计SSM基于农产品交易系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

动态代理:JDK动态代理源码学习

文章目录前言概述什么是代理静态代理动态代理正文入口方法1:newProxyInstance方法2:getProxyClass0方法3:get 获取代理方法4:apply 创建代理方法5:generateProxyClass方法6:generateClassFile代理类总结前言…