JavaSE-IO

2019-12-09  本文已影响0人  雷哒哒

目录

[TOC]

第一章:IO介绍

1.1 什么是IO

​ 生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了 ctrl+s ,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键盘、内存、硬盘、外接设备等等。

​ 我们把这种数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为 输入input 和 输出output ,即流向内存是输入流,流出内存的输出流

​ Java中I/O操作主要是指使用 java.io 包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫做作写出数据。

1.2 IO的分类

根据数据的流向分为:输入流和输出流。

根据数据的类型分为:字节流和字符流。

1.3 IO顶级的父类

第二章:字节流

2.1 一切皆为字节流

​ 一切文件数据(文本、图片、视频等)在存储时,都是以二进制数字的形式保存,都是一个一个的字节,那么传输时一 样如此。所以,字节流可以传输任意文件数据。在操作流的时候,我们要时刻明确,无论使用什么样的流对象,底层传输的始终为二进制数据。

2.2 字节输出流-OutputStream

​ java.io.OutputStream 抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地。它定义了字节输出流的基本共性功能方法。

2.3 FileOutputStream类

​ OutputStream 有很多子类,我们从最简单的一个子类开始。

java.io.FileOutputStream 类是文件输出流,用于将数据写出到文件。

2.4 字节输入流

java.io.InputStream 抽象类是表示字节输入流的所有类的超类,可以读取字节信息到内存中。它定义了字节输入 流的基本共性功能方法。

close方法,当完成流的操作时,必须调用此方法,释放系统资源。

2.5 FileInputStream类

java.io.FileInputStream 类是文件输入流,从文件中读取字节。

2.6 复制图片文件

第三章:字符流

3.1 为什么要学习字符流

当使用字节流读取文本文件时,可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为

一个中文字符可能占用多个字节存储。所以Java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文

件。

3.2 字符输入流-Reader

  1. public void close() :关闭此流并释放与此流相关联的任何系统资源。
  2. public int read() : 从输入流读取一个字符。
  3. public int read(char[] cbuf) : 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中 。

3.3 FileReader类

java.io.FileReader 类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区

3.4 字符输出流-Writer

java.io.Writer 抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。它定义了字节

输出流的基本共性功能方法。

  1. void write(int c) 写入单个字符。
  2. void write(char[] cbuf)写入字符数组。
  3. abstract void write(char[] cbuf, int off, int len) 写入字符数组的某一部分,offff数组的开始索引,len 写的字符个数。
  4. void write(String str)写入字符串。
  5. void write(String str, int off, int len)写入字符串的某一部分,offff字符串的开始索引,len写的字符个 数。
  6. void flush()刷新该流的缓冲。
  7. void close()关闭此流,但要先刷新它。

3.5 FileWriter类

java.io.FileWriter 类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。

第四章:IO异常处理

4.1 JDK7之前的处理方式

4.2 JDK7中的新特性

4.3 JDK9中的新特性

​ JDK9中 try-with-resource 的改进,对于引入对象的方式,支持的更加简洁。被引入的对象,同样可以自动关闭, 无需手动close

第五章:属性集

5.1 属性集合介绍

java.util.Properties 继承于 Hashtable ,来表示一个持久的属性集。它使用键值结构存储数据,每个键及其

对应值都是一个字符串。该类也被许多Java类使用,比如获取系统属性时, System.getProperties 方法就是返回

一个 Properties 对象。

5.2 Properties 类

第六章:缓冲流

6.1 缓冲流介绍

缓冲流,也叫高效流,是对4个基本的 FileXxx 流的增强,所以也是4个流,按照数据类型分类:

缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。

6.2 字节缓冲流

6.3 字符缓冲流

6.4 文本排序

第七章:转换流

7.1 字符编码和字符集

​ 计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的数字、英文、标点符号、汉字等字符是二进制数转换之后的结果。按照某种规则,将字符存储到计算机中,称为编码 。反之,将存储在计算机中的二进制数按照某种规则解析显示出来,称为解码 。比如说,按照A规则存储,同样按照A规则解析,那么就能显示正确的文本符号。反之,按照A规则存储,再按照B规则解析,就会导致乱码现象。

7.2 编码引出的问题

​ 在IDEA中,使用 FileReader 读取项目中的文本文件。由于IDEA的设置,都是默认的 UTF-8 编码,所以没有任何问题。但是,当读取Windows系统中创建的文本文件时,由于Windows系统的默认是GBK编码,就会出现乱码。

public static void main(String[] args) throws IOException {
    FileReader fr = new FileReader("D:\\a.txt");
    int len = 0;
    while((len=fr.read())!=-1){
      System.out.print((char)len); 
    }
    fr.close();
  }
// 结果:��� 乱码

那么如何读取GBK编码的文件呢?

7.3 InputStreamReader类

​ 转换流 java.io.InputStreamReader ,是Reader的子类,是从字节流到字符流的桥梁。它读取字节,并使用指定的字符集将其解码为字符。它的字符集可以由名称指定,也可以接受平台的默认字符集。

7.4 OutputStreamWriter 类

​ 转换流 java.io.OutputStreamWriter ,是Writer的子类,是从字符流到字节流的桥梁。使用指定的字符集将字符 编码为字节。它的字符集可以由名称指定,也可以接受平台的默认字符集。

7.5 图解转换流原理

第八章:序列化

8.1 对象序列化介绍

​ Java 提供了一种对象序列化的机制。用一个字节序列可以表示一个对象,该字节序列包含该 对象的数据 、 对象的 类型 和 对象中存储的属性 等信息。字节序列写出到文件之后,相当于文件中持久保存了一个对象的信息。 反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化。 对象的数据 、 对象的类型 和 对象中 存储的数据 信息,都可以用来在内存中创建对象。看图理解序列化:

8.2 ObjectOutputStream类

java.io.ObjectOutputStream 类,将Java对象的原始数据类型写出到文件,实现对象的持久存储。

8.3 ObjectInputStream类

​ ObjectInputStream反序列化流,将之前使用ObjectOutputStream序列化的原始数据恢复为对象。

第九章:打印流

9.1 打印流介绍

​ 平时我们在控制台打印输出,是调用 print 方法和 println 方法完成的,这两个方法都来自于 java.io.PrintStream 类,该类能够方便地打印各种数据类型的值,是一种便捷的输出方式。

9.2 PrintStream类

上一篇 下一篇

猜你喜欢

热点阅读