File与IO流

File类的使用

在这里插入图片描述
File类中涉及到关于文件或文件目录的创建, 删除, 重命名, 修改时间, 文件大小, 获取子文件等方法. 但是并未设置到写入或读取文件内容的操作, 如果需要读取或写入文件内容, 必须使用IO流来完成

后续File类的对象常会作为参数传递到流的构造器中, 指明读取或写入的"终点"

File常见构造器

在这里插入图片描述

路径分隔符

在这里插入图片描述

File类常用方法

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

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

IO流原理及流的分类

一. 流的分类

  1. 操作数据单位: 字节流, 字符流
  2. 数据的流向: 输入流, 输出流
  3. 流的角色: 节点流, 处理流

二. 流的体系结构
抽象基类      节点流(文件流)      缓冲流(处理流的一种)
InputStream    FileInputStream      BufferedInputStream
OutputStream   FileOutputStream     BufferedOutputStream
Reader      FileReader        BufferedReader
Writer       FileWriter        BufferedWriter

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一般 传输文字用字符流, 传输图片视频等用字节流
节点流是指从文件直接到内存中的流, 直接作用于这两者, 处理流是指, 在节点流的基础上又包裹了一层. 相当于处理流的构造器中传入节点流,相当于把节点流的一个加强.
在这里插入图片描述
在这里插入图片描述

节点流(或文件流)

在这里插入图片描述

FileReader

说明点:

  1. read() 的理解: 返回读入的一个字符, 如果达到文件末尾, 返回-1
  2. 异常的处理: 为了保证流资源一定可以执行关闭操作. 需要使用try-catch-finally处理
  3. 读入的文件一定要存在, 否则就会报FileNotFoundException

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

处理异常

在这里插入图片描述

FileReader每次读取一定量的字符数组

在这里插入图片描述
finally后面需要先判断一下fr是否为null 再进行fr.close关闭流

在这里插入图片描述

FileWriter 向文件中写入

说明:

  1. 输出操作, 对应的File是可以不存在的, 如果不存在, 在输出的过程中, 会自动创建此文件.
  2. 如果File对应的硬盘中的文件要是存在, 如果流使用的构造器是FileWriter(file,false)/FileWriter(file): 对原有文件的覆盖; 如果流使用的构造器是FileWriter(file,true)不会对原有文件覆盖, 而是在原有文件基础上追加内容

在这里插入图片描述

FileReader读进来再用FileWriter写出去

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

FileInputStream

用字节流来读取txt文件, 如果txt文件中有中文, 可能会出现乱码

结论:

  1. 对于文本文件(.txt, .java, .c, .cpp), 使用字符流处理
  2. 对于非文本文件(.jpg, .mp3, .mp4, .avi, .doc, .ppt), 使用字节流处理
  3. 如果文本文件只是复制一下, 而不是从内存层面去读, 比如输出到控制台,可以使用字节流, 是不会乱码的.
    在这里插入图片描述

FileInputStream和FileOutputStream联合使用

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

缓冲流(处理流的一种, 可以提高读写效率)

  1. 缓冲流
    BufferedInputStream 字节读取缓冲流
    BufferedOutputStream 字节写入缓冲流
    BufferedReader 字符读取缓冲流
    BufferedWriter 字符写入缓冲流
  2. 作用: 提高流的读取, 写入速度
    提高读写速度的原因: 内部提供了一个缓冲区
  3. 处理流, 就是"套接"在已有的流的基础上的

BufferedStream应用

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

BufferedReader&BufferedWriter

在这里插入图片描述
还需要加入处理异常和关闭流
BufferedReader&BufferedWriter 可以读写一行的字符, 但是不包括换行符, 使用readLine读取一行,然后直接write字符串即可
在这里插入图片描述

图片加密, 如果要解密时还是需要异或5即可

在这里插入图片描述

转换流(处理流的一种)

在这里插入图片描述
在这里插入图片描述
转换流的使用

  1. 转换流 属于字符流, 也是处理流
    InputStreamReader: 将一个字节的输入流转换为字符的输入流
    OutputStreamWriter: 将一个字符的输出流, 转换为字节 的输出流
  2. 作用: 提供字节流与字符流之间的转换
  3. 解码: 字节, 字节数组—> 字符数组, 字符串 —>InputStreamReader
    编码: 字符数组, 字符串—> 字节, 字节数组 —>OutputStreamWriter
  4. 字符集
    在这里插入图片描述

InputStreamReader的使用, 实现字节的输入流到字符的输入流的转化

在这里插入图片描述

综合使用InputStreamReader和OutputStreamWriter

用UTF-8的字节流读进来, 然后再用GBK写出去
在这里插入图片描述

标准输入, 输出流

在这里插入图片描述

  1. System.in: 标准的输入流, 默认从键盘输入
    System.out: 标准的输出流, 默认从控制台输出
  2. System类的setIn(InputStream in) / setOut(OutputStream out)方式重新指定输入和输出的流
    在这里插入图片描述

打印流

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

数据流

在这里插入图片描述
作用: 用于读取或写出基本数据类型的变量或字符串

写出:

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

对象流

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

序列化的过程

在这里插入图片描述

反序列化

在这里插入图片描述

Java对象进行序列化

要求:

  1. 实现Serializable接口, Serializable是一个标识接口
  2. public static final long serialVersionUID = 12551415123L;//随便写一个数
  3. 除了当前Person类需要实现Serializable接口之外, 还必须保证其内部所有属性也必须是可序列化的(默认情况下, 基本数据类型是可序列化的)
  4. 序列化机制: 对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流, 从而允许把这种二进制流持久地保存在磁盘上, 或通过网络将这种二进制流传输到另一个网络节点. 当其他程序获取了这种二进制流, 就可以恢复成原来的Java对象

补充: ObjectOutputStream 和 ObjectInputStream不能序列化static 和 transient修饰的成员变量

在这里插入图片描述

随机存取文件流RandomAccessFile类

  1. RandomAccessFile直接继承于java.lang.Object类, 实现了DataInput和DataOutput接口
  2. RandomAccessFile既可以作为一个输入流, 又可以作为一个输出流
  3. 如果RandomAccessFile作为输出流时, 写出到的文件如果不存在, 则在执行过程中自动创建
    如果写出到的文件存在, 则会对原有文件进行覆盖, 而且是从头覆盖(只会覆盖前面的内容, 如果原有文件内容特别长, 新覆盖的内容很短的话, 会存在新的在前覆盖旧的, 后面的部分还存在, 没有被覆盖掉)
  4. 可以通过相关操作, 实现RandomAccessFile"插入"数据的效果
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在文件内容中从第4位开始进行覆盖
    在这里插入图片描述
    数据插入效果
    在这里插入图片描述
    在这里插入图片描述

NIO.2中Path, Paths, Files类的使用

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值