IO流
- IO的概念及分类
- 什么是流
- 分类
- 按照方向 [以JVM内存为参照物]
- 按照单位:
- 按照功能:
- 字节流
- 字节流父类(抽象类)
- InputStream
- OutputStream
- 字节节点流
- FileOutputStream:文件字节输出流
- FileInputStream:文件字节输入流
- 字节过滤流
- BufferedOutputStream/Bu fferedInputStream
- PrintStream (输出流)
- ObjectOutputStream / ObjectInputStream(过滤流)
- 常见编码方式
- 字符流
- 字符流的父类
- 节点流
- FileWriter:文件字符输出流
- FileReader:文件字符输入流
- 过滤流
- BufferedReader
- PrintWriter:
- 桥转换流
- InputStreamReader / OutputStreamWriter
- File类
- File 和 IO流的区别
- 常用的方法
IO的概念及分类
什么是流
流就是内存和存储设备之间传输数据的通道或是管道
分类
按照方向 [以JVM内存为参照物]
- 输入流
将<存储设备>中数据读取到< jvm内存>中->读操作(read) - 输出流
将< jvm内存>中数据写入到< 存储设备>中->写操作(write)
按照单位:
- 字节流
以字节为单位,可以操作任意类型的文件 - 字符流
以字符为单位,可以操作文本类型的文件
注意:文本类型的文件:能以 记事本打开而且不乱码的文件,例如:.java / .txt / .c / .html 等文件都是文本文件,.class / .world / .ppt / .map4 等是非文本文件
按照功能:
- 节点流
只具有基本的读写功能 - 过滤流
在节点流的基础上增强功能
字节流
字节流父类(抽象类)
InputStream
字节输入流,对应的读操作(read)
OutputStream
字节输出流,对应的操作写操作(write)
字节节点流
FileOutputStream:文件字节输出流
常见的构造方法
- FileOutputStream fos = new FileOutputStream(“E:/test/a.txt”);
- 如果指定文件不存在,则JVM会自动的创建文件,但是如果指定文件夹不存在,则jvm报错,错误信息为: java.io.FileNotFoundException: (系统找不到指定的路径)
- 绝对路径
带有盘符的路径,盘符:/文件夹/文件
- FileOutputStream fos = new FileOutputStream(“a.txt”);
- 相对路径:默认在当前项目的根目录下查找所需要的的文件,如果有,直接使用,如果没有则jvm自动创建此文件
- FileOutputStream fos = new FileOutputStream(“file/a.txt”);
- 开发时,通常在项目的根目录下创建一个文件夹,用于存 储项目中操作的文件,便于管理
- FileOutputStream fos = new FileOutputStream(“file/a.txt”,true);
- 参数说明
第一个参数:指定操作的文件路径及文件名
第二个参数:boolean,是否在原有内容进行追加
true - 不覆盖原有内容,直接追加,false - 覆盖原有内容
常用方法
- void write(int n):将一个字节的内容写入到文件中
FileInputStream:文件字节输入流
常用构造方法
- FileInputStream fis = new FileInputStream(“E:\Java2003\a.txt”);
- 参数代表
操作文件的路径及文件名,指定的文件夹及文件 必须存在,否则运行报错,报错信息为:java.io.FileNotFoundException: (系统找不到指定的文件)
常用的方法
int read():一次性读取一个字节的内容,读取到的内容作为 返回值返回,如果达到文件的尾部,则返回-1
字节过滤流
BufferedOutputStream/Bu fferedInputStream
- 缓冲流,提高IO的读写效率,减少访问磁盘次数
- 数据存储存储在缓冲区,可以通过flush方法或是close方法将缓冲区内容一次性写入到文件中,并清空缓冲区
- flush方法只是清空缓冲同将缓冲区的内容一次性写入到文件中,但是流还是继续可以使用;
- close方法关闭流的同时清空缓冲区,将缓冲区的内容一次性的写入到文件中,流一旦关闭不能再继续使用
注意:缓冲满的时候,将缓冲区的内容一次性写入到文件 中,同时清空缓冲区
PrintStream (输出流)
- 缓冲流,提高IO的写的效率
- 增强了操作基本数据类型的方法,同时还可以操作字符串 print(int n) / print(long l) / print(boolean b) / print(double d) / print(String str) —> 不自动换行
println(int n) / println(long l) / println(boolean b) / println(double d) / println(String str) --> 自动换行
ObjectOutputStream / ObjectInputStream(过滤流)
- 增强缓冲区,提高IO读写效率
- 增强了操作8中基本数据类型方法
- 对象序列化
- 概念
对象放在流上进行传输的过程 - 参与对象序列化的要求
参与对象序列化的对象对应的类必须实现 java.io.Serializable接口 - 对象的读写操作
void writeObject(Object obj):将指定的对象写入到文件
Object readObject() :从文件中读取对象 - 文件达到尾部的标记
java.io.EOFException - 如果对象的某一个属性不想参与对象序列化,则属性前面用transient修饰
- 如果参与对象序列的对象中有自定类型的属性,该属性也必须实现 java.io.Serializable 接口,否则运行报错,错误信息为:java.io.NotSerializableException(不可序列化的异常)
- 如果参与对象序列化的是集合对象,集合对应类在JDK提供时已经实现java.io.Serializable 接口,但是如果集合中存储的是自定义类型的对象,则该对应对应类必须实现 java.io.Serializable接口
常见编码方式
- 常见的编码
ASCII码值表
美国制定的第一个标准表,每一个标准表的前 0~255都是此标准内容
ISO8859-1
西欧编码,底层占用一个字节内容
GB2312
最早的中国汉字编码表,6000多汉字
GBK
目前主流的中国汉字编码表,2万多汉字
GB18030
汉字的编码表,7万多的中国符号
Big5
中国繁体字,中国台湾应用
UTF-8
万国码, 在UTF-8中底层采用是动态编码,汉字占用2~3字节
注意:编码方式的书写不区分大小写,utf-8等价于UTF-8 - 编码和解码
编码:将字符对应十进制转换为二进制的过程
解码:将进制转换为十进制对应为字符的过程
注意:只有当编码方式和解码方式统一,才不会出现乱码
字符流
字符流的父类
- Reader
字符输入流 [对应的读操作 - read] - Writer
字符输出流 [对应的写操作 - write]
节点流
FileWriter:文件字符输出流
- 常用方法
void write(int n):将单个字符写入到文件
void write(String str):将一个字符串写入到文件中
FileReader:文件字符输入流
- 常用方法
int read():一次性读取单个字符内容,读取的内容作为返回值返回,如果达到文件的尾部,则返回-1
过滤流
BufferedReader
String readLine():一次性的读取一个文本行的内容,返回值类型为String,如果达到文件尾部则返回null.
PrintWriter:
- 可以操作8种基本数据和字符串
print(形参列表):将对应数据写入到文件中,不换行
println(形参列表):将对应的数据写入到文件中,自动换行 - 可以将对象对应内容写入文件中
println(Object obj) :将对象的toString方法的返回值写入到 文件中
桥转换流
InputStreamReader / OutputStreamWriter
- 作用
字节流转换为字符流的通道,可以设置编解码的方式 - 步骤总结
需要设置编解码格式的时候,需要应用到桥转换流
- 创建文件字节流作为基础流:
FileInputStream/FileOutputStream - 创桥转换流:
将字节流转换字符流,同时可以设置编解码格式InputStreamReader / OutputStreamWriter - 包装过滤流,目的:增强字符流的读写功能 BufferedReader/PrintWriter
- 读写操作
- 关闭流,关闭最层即可
File类
File 和 IO流的区别
- IO流:对文件的内容直接操作,读文件或是往文件中写入内容
- File:代表一个文件或是文件夹(目录),利用File类中的一些方法对文件或是文件夹进行操作
常用的方法
- 构造方法
public File(String name):操作文件或是文件夹的路径及名字 - 成员方法
方法名 | 含义 |
boolean createNewFile() | 创建一个新的文件,成功- true;不成功-false(文件已经存在) |
boolean mkdir() | 创建一个新的文件夹 |
boolean delete() | 删除一个文件或是文件夹,如果删除文件夹,文件夹为空,删除成功;文件夹不为空, 删除失败,如果删除文件,不管文件中是否存在内容,删除成功 |
String getName() | 获取文件名,带有后缀(文件类型,扩展名) a.txt;同时还可以获取文件夹的名字 |
String getAbsolutePath() | 获取绝对路径 |
boolean exists() | 判断一个文件或是文件夹是否存在, 存在-true;不存在-false |
File[] listFiles() | 获取文件夹中所有为文件夹和文件 |
boolean isFile() | 判断指定的是否为文件,是-true;不 是-false |
boolean isDirectory() | 判断指定的是文件夹,是-true; 不是-false |
整理不易,喜欢请点个赞!