IO流的概述
IO流:Input表示输入,O是Output表示输出
IO流的作用:用于处理设备(文件,内存,控制台,键盘等)之间的数据传输
注意:其他设备到内存(Java程序)属于输入(读),从内存(Java程序)到其他设备属于输出(写)
分类:
流向分:输入流和输出流
IO流使用时的注意事项:
(1)需要抛出异常IOException
(2)需要导包,因为IO相关的类位于java.io包下
(3)调用close()方法释放资源
字符流
FileWriter类
和文件相关的字符输出流
步骤:
(1)创建FileWriter对象,传递的是文件的路径,表示我要往该文件中写入数据
FileWriter fw = new FileWriter("D:\b.txt");
注意:关联的文件不存在,会自动创建,但是如果文件路径(比如盘符和文件夹)不存在不会创建,会报出异常,提示文件路径不存在
(2)调用方法往文件中写入数据
fw.write("哈哈");
//(3)刷新缓冲区
// fw.flush();
(4)释放资源
fw.close();
注意:close()方法除了具有释放资源的功能,还有自动刷新的功能
相对路径和绝对路径
绝对路径:从盘符开始的路径,比如E:\a.txt
相对路径:不是从盘符开始的路径,比如hello\a.txt,b.txt
在Eclipse中相对路径,相对的是当前项目路径下
close()和flush()的区别
flush():刷新缓冲区;flush()可以多次调用,调用完flush()方法之后,还可以继续使用流对象
close():先刷新,再关闭资源;close()调用完之后,流就关闭了,不能在使用流对象了
5个写的方法
void write(String str):写一个字符串
void write(int ch):一次写一个字符
void write(char[] chs,int index,int len):写字符数组的一部分
void write(String str,int index,int len):写字符串的一部分
void write(char[] chs):一次写一个字符数组
写入换行
Windows系统:
追加写入
使用FileWriter(String fileName, boolean append) 这个构造方法
只要第二参数传入true
FileReader
和文件相关的字符输入流
步骤:
(1)创建FileReader对象,关联要读取的文件
FileReader fr = new FileReader("a.txt");
注意:读取的文件必须要存在,否则报文件找不到异常
(2)通过read()方法读取字符,一次读取一个字符
int ch = fr.read();
// 循环读
int ch;
while((ch=fr.read())!=-1){
}
int read():一次读取一个字符,返回字符对应的码标值,如果读取到文件的末尾返回-1
(3)释放资源
fr.close();
读的方法
int read():一次读取一个字符
int read(char[] chs):一次读取一个字符数组,返回读取的有效字符个数
缓冲流(高效流)
BufferedWriter
* newLine():写入一个换行符,它是跨平台的
BufferedReader
* readLine():一次读取一行数据,碰到回车换行表示一行读取结束,但是读取的数据中不包含回车换行
文件拷贝
方式一:FileReader和FileWriter一次读写一个字符
方式二:FileReader和FileWriter一次读写一个字符数组
方式三:BufferedReader和BufferedWriter一次读写一个字符
方式四:BufferedReader和BufferedWriter一次读写一个字符数组
方式五:BufferedReader和BufferedWriter使用特殊功能newLine()和readLine()一次读写一行
案例
一:把ArrayList集合中的字符串数据存储到文本文件
二:从文本文件中读取数据到ArrayList集合中,并遍历集合