1 IO流
1.1 IO流概述
IO是两个英文单词缩写:
I:Input 输入;
O:output 输出;
IO流:
是java提供的一种用于操作数据的流对象;(java编写的一些类)java将IO流相关的类都写在了java.io包下;
1.2 IO流作用
读硬盘上或其他地方的数据到程序中,或将程序中的数据写到其他地方或硬盘上;
1.3 IO流方向问题
1.4 IO流分类
按照操作内容上,分为两类:
1:字符流
按照方向上分:
输入流:
将硬盘上文件中的数据读取到程序中;代表类:FileReader
输出流:
将程序中的数据写到硬盘上的文件中;代表类:FileWriter
按照效率上分:
高效流(缓冲流):
BufferedReader
BufferedWriter
2:字节流(就业班学)
2 字符流
2.1 字符输出流
字符输出流的代表类:FileWriter,是java编写好的类,存在与java.io包下;
2.1.1 构造方法:
FileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对象。 fileName有两种形式: 1:绝对路径: 从盘符开头的路径就是绝对路径,例如:C:\\….. D:\\….. 2:相对路径: 相对于代码编写的工程中的路径;例如: abc/1.txt |
---|
2.1.2 常用方法:
abstract void | close() 关闭此流,但要先刷新它。 |
---|---|
abstract void | flush() 刷新该流的缓冲。 |
void | write(char[] cbuf) 写入字符数组。 |
abstract void | write(char[] cbuf, int off, int len) 写入字符数组的某一部分。 |
void | write(int c) 写入单个字符。C代表的是一个ASCII码值; |
void | write(String str) 写入字符串。 |
void | write(String str, int off, int len) 写入字符串的某一部分。 |
2.1.3 换行与续写
续写:
使用带boolean类型的构造方法:
FileWriter(String fileName, boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。 Append:只能选true,代表要续写; |
---|
在java中使用固定的转义字符代表换行的意思:
- windows:\r\n
- linux:\n
- mac:\r
- 换行符可以写在第一个数据的结尾,也可以写在第二个数据的开头
2.1.4 close()和flush()方法的区别
- flush():刷新缓冲区。流对象还可以继续使用。
- close():先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。
2.1.5 注意事项
1:IO流可以自动创建不存在的文件,但是不能创建文件夹;
2:IO流只能向文件中写数据,不能直接向文件夹中写数据;
2.2 字符输入流
在java中使用FileReader用于读硬盘上文件中的数据到程序(内存)中;
2.2.1 构造方法
FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader。 fileName有两种形式: 1:绝对路径: 从盘符开头的路径就是绝对路径,例如:C:\\….. D:\\….. 2:相对路径: 相对于代码编写的工程中的路径;例如: abc/1.txt |
---|
2.2.2 常用方法
abstract void | close() 关闭该流并释放与之关联的所有资源。 |
---|---|
int | read() 读取单个字符。 如果想看到的是一个字符,必须将返回值强转成一个char类型的数据; 返回的int值,代表的是这个字符的码值; |
int | read(char[] cbuf) 将字符读入数组。 返回的int值,代表的是本次读取的字符的数量; |
abstract int | read(char[] cbuf, int off, int len) 将字符读入数组的某一部分。 off:开始索引 len:数组可用的长度; Int返回值代表的是本次读取的字符的数量; |
2.2.3 使用数组的方式读文件中的数据
注意事项:
一定要考虑最后一次循环的情况:
因为最后一次可能数组装不满,那么我们转字符串的时候,只能转有效的字符;
用String的构造方法:
String(char[] value, int offset, int count) 分配一个新的 String,它包含取自字符数组参数一个子数组的字符。 |
---|
2.2.4 文件复制的练习
3 字符缓冲流
3.1 字符缓冲流概述
所谓的缓冲流,就是在刚刚学过的基本流的基础上,自带了一个缓冲区,可以提升IO流操作文件的效率;
3.2 缓冲流分类
按照方向可以分为两个:
1:字符输出缓冲流,BufferedWriter:底层封装了一个FileWriter;
2:字符输入缓冲流,BufferedReader:底层封装了一个FileReader;
3.3 缓冲流的构造方法
BufferedWriter(Writer out) 创建一个使用默认大小输出缓冲区的缓冲字符输出流。 |
---|
BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流。 |
---|
常用方法:
常用方法可以参考FileWriter和FileReader的方法;
3.4 缓冲流的特殊方法
1:BufferedReader中提供了一个一次读一行文字的方法:
String | readLine() 读取一个文本行。 |
---|---|
2:BufferedWriter中提供了一个换行的方法:(无需程序员考虑操作系统)
void | newLine() 写入一个行分隔符。 |
---|---|
4 综合练习
4.1 把ArrayList集合中的字符串数据存储到文本文件
4.2 从文本文件中读取数据到ArrayList集合中,并遍历集合
- 每一行数据作为一个字符串元素