一、概述

1、介绍

  I/O是 Input/Output 的缩写,IO流用来处理设备之间的数据传输,如读/写文件,网络通讯等。Java对数据的操作是通过流的方式进行。java.io 包下提供了各种"流"类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据。
  输入input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。
  输出output:将程序(内存)数据输出到磁盘、光盘等存储设备中。

 Java基础(八)——IO流1_字节流、字符流-LMLPHP

2、分类

  按操作数据单位不同分为: 字节流 (8 bit),字符流 (16 bit)。
  按数据流的流向不同分为: 输入流,输出流。
  按流的角色的不同分为: 节点流(文件流),处理流。

Java基础(八)——IO流1_字节流、字符流-LMLPHP

  节点流(文件流):直接作用在文件上,从数据源或目的地读写数据。
  处理流:不直接作用在文件上,不直接连接到数据源或目的地,而是"连接"在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。

  节点流:

Java基础(八)——IO流1_字节流、字符流-LMLPHP

  处理流:

Java基础(八)——IO流1_字节流、字符流-LMLPHP

3、IO流体系

  四个顶层的抽象基类。

Java基础(八)——IO流1_字节流、字符流-LMLPHP

  由这四个类派生出来的子类名称都是以其父类作为子类名的后缀。例:InputStream的子类FileInputStream,Reader的子类FileReader。
  IO流的体系如下:重点掌握高亮部分。

Java基础(八)——IO流1_字节流、字符流-LMLPHP

  【访问文件】是节点流(文件流),其他(除了抽象基类)都是处理流。

二、字符流

1、FileReader(输入)

  用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在FileInputStream上构造一个InputStream。
  read():一次读一个字符,指针会指向下一个字符。读到末尾返回-1。
  代码示例:读文件

 1 // 文件:F:\\hello.txt
 2 // 内容:helloworld123中国人1
 3 public class Main {
 4     public static void main(String[] args) {
 5         try (FileReader fr = new FileReader(new File("F:\\hello.txt"));) {
 6             int data;
 7             while ((data = fr.read()) != -1) {
 8                 System.out.print((char) data);
 9             }
10         } catch (Exception e) {
11         }
12     }
13 }
14
15 // 结果
16 helloworld123中国人的
12-29 08:54