1 IO流

1.1 IO流概述

IO是两个英文单词缩写:
I:Input 输入;
O:output 输出;
IO流:
是java提供的一种用于操作数据的流对象;(java编写的一些类)java将IO流相关的类都写在了java.io包下;

1.2 IO流作用

读硬盘上或其他地方的数据到程序中,或将程序中的数据写到其他地方或硬盘上;

1.3 IO流方向问题

day10-课堂笔记-IO流(自己改的) - 图1

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中使用固定的转义字符代表换行的意思:

  1. - windows:\r\n
  2. - linux:\n
  3. - mac:\r
  4. - 换行符可以写在第一个数据的结尾,也可以写在第二个数据的开头

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 文件复制的练习

day10-课堂笔记-IO流(自己改的) - 图2

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集合中,并遍历集合

  • 每一行数据作为一个字符串元素