java之IO流
FileWriter是一个字符输出流,作用是向文件中写入数据
1.导包
import java.io.FileWriter;
2.创建
类名 对象名 = new 类名(参数);
FileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对象。
fileName是一个文件路径,比如:E:\\data.txt
举例:
FileWriter fw = new FileWriter("E:\\data.txt");
注意,创建FileWriter对象完成的3个操作:
(1)根据路径,寻找文件,如果不存在,直接创建新的文件
(2)创建FileWriter对象
(3)将FileWtier对象和文件相关联
3.使用
成员方法
void write(String str) 将字符串str写入到文件对应的内存中
void flush() 刷新该流的缓冲,把内存缓冲区中的数据刷新到文件中。
void close() 关闭此流,但要先刷新它
4.使用FileWriter的步骤
(1)创建FileWriter对象,并和文件相关联
(2)调用write方法,向文件中写入数据
(3)执行flush操作
(4)关闭流,释放资源,close方法
5.注意,过程:
Java程序--->JVM--->OS(操作系统)--->硬盘
路径问题
1.绝对路径:指的是从盘符根路径开始,一直写到文件名,中间的每个具体的路径都要有
2.相对路径:指的是相对于项目的根路径,直接写文件名即可
关闭和刷新方法的区别
1.flush:是将文件内存中的数据,刷新到文件中,调用flush方法后,可以继续向文件中写入数据
2.close:执行close方法后,不能继续写入数据,否则报错:Stream closed
执行close方法,该方法内部会先执行flush,将数据写入到文件,再关闭流
写数据的5个方法
1.void write(String str):写一个字符串数据
2.void write(String str,int index,int len):写一个字符串中的一部分数据, index:开始索引,len:写几个
3.void write(int ch):写一个字符数据,这里写int类型的好处是既可以写char类型的数据,也可以写char对应的int类型的值。'a',97
4.void write(char[] chs):写一个字符数组数据
5.void write(char[] chs,int index,int len):写一个字符数组的一部分数据, index:开始索引,len:写几个
换行写入
换行也是一个字符,不同的操作系统中,有所不同
1.在window中,换行用:\r\n
2.Linux系统中,换行:\n
3.maxOS系统中,换行:\r
FileWriter追加写入
要实现追加写入,需要看FileWriter类的构造方法
1.FileWriter(String fileName, boolean append)
构造放中参数的作用:
第一个参数:写入文件的目的地
第二个参数:append作用
true:可以续写,在文件的末尾处继续追加写入
false:不能续写,覆盖之前的文件
2.FileWriter(String fileName) :没有写第二个参数,相当于第二个参数为false,表示的是覆盖写入(重新写入)
FileReader是一个字符输入流(文件字符输入流),作用是从文件中读取数据
1.导包
java.io.FileReader;
2.创建:
构造方法
FileReader(String fileName) 传递要读取的文件名称,文件名既可以是一个绝对路径,又可以是一个相对路径
举例:
FileReader fr = new FileReader("E:\\data.txt");
注意,创建FileReader对象,完成3件事:
(1)根据路径,寻找文件,如果不存在,直接报错
(2)创建一个FileReader对象
(3)将FileReader对象和文件相关联
3.使用
成员方法
int read() 读取单个字符并返回,如果返回值为-1,说明文件结束了,不用再读了
int read(char[] cbuf) 一次读取一个字符数组的数据,返回的是实际读取的字符个数
4.FileReader的使用步骤
(1)创建文件字符输入流FileReader对象fr,并和文件相关联
(2)调用read方法读取数据
(3)关闭流资源
5.注意,过程:
Java程序
读取字符数组
int read(char[] cbuf) 一次读取一个字符数组的数据,返回的是实际读取的字符个数
如果返回值为-1,说明文件结束了,不用再读取了
BufferedWriter也是一个字符输出流,用法和FileWriter差不多,但是比FileWriter提供了更为强大的功能
底层定义了一个长度为8192的字符数组,作为缓冲
1.创建:
(1).先创建一个普通的FileWriter对象
FileWriter fw = new FileWriter("E:\\data.txt");
(2).再将FileWriter对象包装成BufferedWriter对象
BufferedWriter bw = new BufferedWriter(fw);
2.使用:
通过构造方法,发现,BufferedWriter最终也是通过FileWriter来操作文件的,所以FileWriter具备的方法,
BufferedWriter都具有
3.注意:
(1)不建议调用flush方法,因为缓冲区满了后,会自动刷新
(2)只需要关闭BufferedWriter,不需要关闭FileWriter
写一个换行符
void newLine():写一个换行符,这个换行符由系统决定,写入一个自适应系统的换行符
BufferedReader也是一个字符输入流,用法和FileReader差不多,但是比FileReader提供了更为强大的功能
底层定义了一个长度为8192的字符数组,作为缓冲
1.创建:
(1).先创建一个普通的FileReader对象
FileReader fr = new FileReader("E:\\data.txt");
(2).再将FileReader对象包装成BufferedReader对象
BufferedReader br = new BufferedReader(fr);
2.使用:
通过构造方法,发现,BufferedReader最终也是通过FileReader来操作文件的,所以FileReader具备的方法,
BufferedReader都具有
3.注意:
(1)不建议调用flush方法,因为缓冲区满了后,会自动刷新
(2)只需要关闭BufferedReader,不需要关闭FileReader
使用BufferedReader一次读取一行内容
String readLine():一次读取一行数据,但是不读取换行符,如果读取结束,返回的是null