IO流,,
创始人
2024-04-20 16:25:45

标题

  • 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类型)
setPropertiy(key,value)设置键值对到Properties对象, 没有key相当于添加
store将Properties中的键值对存储到配置文件,在idea中,保存信息到配置文件,如果含有中文,则会将汉字存储为unicode码

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

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

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...