一、I/O流的概述和分类
(一)为什么学习IO流
集合存储数据只能在内存中存储数据,不能永久的存储,会导致数据的丢失,我们急需技术可以可以将数据永久存储,所以便产生了IO流技术。
(二)IO流用来处理设备直接按的数据传输
1.可以把数据存储在文件,也可以从文件中读取数据
2.常见应用:文件复制、上传文件、下载文件
(三)IO流分类 ctl + shift + o 可以导包
1.输出流 FileWriter
(1) java.io
(2) 用来写入字符文件的便捷类;
【1】FileWriter(String fileName):传递一个文件名称
【2】成员方法
--void writer(String str)
--void flush()
--void close()
(3)输出流写数据的步骤(IO流必须抛出IO异常)
【1】 创建输出流对象----调用系统资源创建一个文件,创建输出流对象,把输出流对象指向文件
FileWriter fw = new FileWriter("d:\\a.txt");
【2】创建输出流对象的写数据的方法
fw.writer()
//硬盘存储数据的基本单位是字节,存储字符串为很多字节,数据没有直接写到文件,其实是写到了内存缓冲区
fw.flush();
//刷新内存缓冲区,将数据写入文件
【3】释放资源
fw.close();
//通知系统释放和该文件相关的资源,close在关闭相关资源的时候,也会访问内存缓冲区,并刷新它,如果写入的数据较少时,可以不用使用fw.flush()
(4)如何实现数据的换行
\n可以实现换行,但是在windows系统的记事本中并没有换行的原因是windows识别的换行不是\n,而是\r\n
windows:\r\n
linux:\n
mac:\r
(5)如何实现数据的追加写入
FileWriter fw = FileWriter("c.text",true)
//是否追加写入数据
2.输入流 FileReader
(1)java.io
(2) 用来读取字符数据的便捷类
【1】构造方法
FileReader(String fileName):传递文件名称
【2】成员方法
(3)输入流读文件的步骤:
【1】创建输入流对象
FileReader fr = new FileReader("fr.txt");
【2】调用输入流对象的读数据方法
----int read():
//一次读取一个字符,返回字符的对应的int值
while(ch= fr.read(ch)==-1){//文件读取完
System.out.print((char)ch);
}
----int read(char[] cbuf)
//一次读取一个字符数组的数据返回的是实际读取的字符个数
char[] chs = new char[1024]
// 这里可以是1024的整数倍,因为KB、MB
进制是1024。
if(len == fr.read(chs) != -1){
System.out.print(new String(chs,0,len));
}
【3】释放资源
fr.close()
(三)字符缓冲流
1.BufferedWriter基本用法
(1)java.io
(2)将文本写入字符输出流,缓冲各个字符,从而提供耽搁字符、数组和字符串的高效写入。
BufferdWriter bw = new BufferdWriter(new FileWriter("bw.txt"));
bw.write("HELLO");
bw.flush();
bw.close();
(3)
2.BufferdReader基本用法
(1)java.io
(2) 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
BufferdReader br = new BufferdReader(new FileReader("bw.txt"));
int ch;
while((ch = br.read()) != -1){
System.out.print((char)ch);
}
char[] chs = new char[1024];
int len;
while(len = br.read(chs)!=-1){
System.out.print(new String(chs,0,len));
}
br.close();
(3)缓冲流的特殊功能
BufferdWriter
void newLine():写一个换行符,这个换行符由系统决定
BufferdReader
String readLine():一次读取一行数据,但是不读取换行符
while(line = br.readLine()!=null){
System.out.println(line);
}
(4)