1 IO概述
IO指数据的传输,可以看作是数据的一种流动,按照流的方向,以内存为基准,输入input和输出output,流向内存的叫输入流,流出内存的叫输出流。输入也叫读取,输出也叫写出
1.1 IO的分类
根据数据的流向:输入流和输出流
输入流,把数据从其他设备读取到内存的流
输出流,把数据从内存写出到其他设备的流
根据数据分类,字节流和字符流
字节流,以字节为单位,读写数据的流
字符流,以字符为单位,读写数据的流
1.2 顶级父类

2 字节流
2.1 一切皆为字节
一切数据在存储时,都是以二进制数字的形式保存,都是一个一个的字节,那么传输也是如此,所以,字节流可以传输任意文本数据,在操作流的时候,我们要时刻明确,无论使用什么流对象,底层都是二进制数据。
2.2 字节输出流(OutputStream)
java.io.outputstream 抽象类表示字节输出流,将指定的字节信息写到目的地,定义了字节输出流的共性方法:
- public void close():关闭输出流并释放资源
- public void flush():刷新此输出流,并强制任何缓冲的输出字节被写出
- public void write(byte[] b):将从指定的字节数组写入此输出流
- public void write(byet[] b int off , int len):
- public void write(int b):将指定的字节输出流
2.3 FileOutputStream类
Java.io.FileOutputStream类是文件输出流,用于将数据写出到文件
构造方法
- public FileOutputStream(File file):创建文件输出流以写入由指定的File对象表示的文件
- public FileOutputSteam(String name):创建文件输出流以指定的名称写入文件。
当创建一个流对象时,必须传入一个文件路径,该路径下,如果没有这个文件,会创建该文件,如果有这个文件,会清空这个文件的数据。
写出字节数据
- 1、写出字节:write(int b):可以写出一个字节数据
- 2、写出字节数组:write(byte[] b):每次可以写出数组中的数据,
继续追加续写
- public FileOutputStream(File file,boolean append):创建文件输出流以写入由指定的File对象表示文件。
- public FileOutptStream(File file,boolean append):创建文件输出流以指定的名称写入文件上述两个方法,参数中都需要传入一个boolean类型的值,true表示追加,false表示清空元数据
2.4 字节输入流(InputStream)
java.io.InputStream抽象类是表示字节输入流的所有类的超类,可以读取字节信息到内存,定义了字节输入流的基本共性方法
- public void close():关闭此输入流并释放资源
- public abstract int read ():从输入流读取数据的下一个字节
- public int read(byte[] b):从输入流中读取一些字节数,并将它们存储到字节数组中
2.5 FileInputStream类
Java.io.FileInputStream类是文件输入流。从文件中读取字节
构造方法:
- public FileInputStream(File file):通过打开与实际文件连接来创建一个FileInputStream,该文件有文件系统中的File对象file命名
- public FileInputStream(String name):该文件有文件系统的路径名name命令创建一个流对象时,必须传入一个文件路径,该路径下如何没有文件,会抛出FileNotFoundException
读取字节数据
- 1、读取字节:read方法,每次可以读取一个字节的数据,提升为int类型,读取到文件末尾,返回-1
- 2、使用字节数组读取:read(byte[] b):每次读取b的长度个字节到数组中,返回读取到有效字节个数,读取到末尾,返回-1
3 字符流
当使用字节读取文本文件时,遇到中文字符时,可以不会显示完整的字符,因为一个中文字符占多位字节存储,Java提供字符流,以字符为单位读写数据,专门用于处理文本文件
3.1 字符输入流(Reader)
java.io.Reader抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中,定义了字符输入流的基本共性功能方法:
- public void close():关闭此流并释放此流相关的资源
- public int read():从此输入流读取一个字符
- public int read(char[] cbuf):从输入流读取一些字符,并将它们存储到字符数组中,
3.2 FileReader
java.io.FileReader类是读取字符文件的类,构造时使用系统默认的字符编码和默认字节缓冲区,
构造方法
- public Reader(File file):创建一个新的FileReader,给定要读取的File对象
- public Reader(String fileName):创建一个新的FileReader,给定要读取的文件的名称当你创建一个流对象时,必须传入一个文件路径,类似于FileInputStream
读取字符数据
- 1、读取字符:read方法,每次可以读取一个字符的数据,提升为int类型,读取到文本末尾,返回-1,循环读取
- 2、使用字符数组读取:read(char[] b):每次读取b的长度的字符到数组中,返回读取到的有效字符个数,读取末尾时,返回-1
3.3 字符输出流(Writer)
java.io.Writer抽象类是用于表示写出字符流的所有类的超类,将指定的字符信息写出到目的地定义了字符输出流的共性方法
- public void write(int c):写入单个字符
- public void write(char[] b):写入字符数组
- public abstract void wrter(char[] b ,int off,int len):写入字符数组的某一部分
- public write(String str):写入字符串
- public write(String str,int off,int len):写入字符串的某一部分
- void flush()
- void close()
3.4 FileWriter
java.io.FileWriter是写出字符到文件的类,构造时,使用系统默认的字符编码和字节缓冲区
构造方法:
- FileWriter(File file):创建一个新的字符输出流,给定要写出的File对象
- FileWriter(String filename):创建一个新的字符出流,给定要写出的文件的名称
基本写出数据
- 写出数据 write(int b):每次写出一个字符数据
关闭和刷新
因为内置缓冲区的原因,如果不关闭输出流,无法写出字符到文件中,但是关闭的流对象,是无法继续写出数据,如果我们既想写出数据,又想继续使用流,就有flush方法
- flush:刷新缓冲区,流对象可以继续使用
- close:先刷新缓冲区,再关闭
写出其他数据
- 写出字符数组write(char[] b );每次写出字符数组中的数据
- 写出字符串write(string str):每次可以写出字符串中的数据
5 属性集
5.1 概述
java.util.Projecties继承于hashtable,来表示一个持久的属性集。它使用键值结构存储数据,每个键及其对应的值,都是一个字符串
5.2 Properties类
构造方法:
- public Properties():创建一个空的属性列表
基本存储方法
- public Object setProperties(String key,String value):保存一对属性
- public String getProperties(String key):键获取值
- public Set stringPropertyNames:所有键的名称集合
与流相关的方法
- public void load(InputStream isStream):从字符输入流中读取键值对参数中使用了字节输入流,通过流对象,可以关联到某文件上,这样能加载文本中的数据