IO字符流

一.输入字符流

—–\ Reader 所有输入字符流的基类,是抽象类
———–\ FileReader 文件的输入字符流,用于文件中的输入,可以直接读取字符
———–\ BufferedReader 文件的缓冲输入字符流,内部维护了一个8kb的字符数组,是输入直接从内存中输入,效率更高,并且扩展了FileReader的功能

FileReader

文件中使用的缓冲输入字符流
使用步骤:
1.找到目标文件
2.建立目标文件与程序的输入通道
3.导流
4.关闭资源
类似字节输入流,先用|File类指定需要输入的文件,接着建立FileReader通道,传入建立的File对象,用read方法读数据,read方法可以每次读取一个数据,读到文件末尾返回-1,read方法也可以传入一个char数组,接收的数据传入char数组中,返回值为接收的数据量,接收到文件末尾返回-1,理论上数组越大效率越高,最后利用close关闭资源


File file=new File(“D:\\a.txt”);
FileReader fileReader=new FileReader(file);
\\1.逐个读取
int contend;
while((contend=fileReader.read())!=-1)
System.out.print((char)contend);
\\2.利用char[]数组读取
char[] buf=new char[50];
int length;
while((length=fileReader.read(buf))!=-1)
System.out.print(buf);

fileReader.close();

BufferedReader

缓冲输入字符流

使用步骤:
1.找到目标文件
2.建立文件与程序的输入通道
3.建立BufferedReader对象传入通道对象
4.导流
5.关闭资源

先找到目标文件,建立File对象,接着传入File对象作为参数建立通道FileReader对象,传入FileReader对象作为参数建立BufferedReader对象,使用BufferedReader对象的read读取数据,BufferedReader内部维护一个8kb的缓冲数组,所以使用BufferedReader对象的read读取数据比使用FileReader的read方法读取效率更高,BufferedReader还提供了一个新的方法readLine,每次读取一行数据,返回的是String类型的数据,读到末尾返回null,调用BufferedReader的close方法就是关闭FileReader,和调用FileReader的close方法一样


File file = new File(“D:\\a.txt”);
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(flieReader);
///使用read方法读取
int contend;
while((contend=bufferedReader.read())!=-1){
System.out.print((char)contend);
}
///使用readLine读取
String line;
while((line=bufferedReader)!=null)
System.out.print((line);

bufferedReader.close();

二.输出字符流

—–\ Writer 所有输出字符流的基类,是抽象类
———–\ FileWriter 文件的输出字符流,用于对文件中的输出
———–\ BufferedWriter 文件的缓冲输出字符流

1.FileWriter

步骤:
1.找的目标文件
2.建立文件与程序的字符输出通道
3.导流
4.关闭文件

注意:
1.文件不接受字节数组,接受字符数组
2.Writer内部维护了一个缓冲数组,大小为1024个字符
数组,所以调用writer时,需要使用flush刷新到硬盘,
或者字符数组满了以后自动刷新,又在最后关闭资源是
刷新到硬盘
3.在建立通道时,出来传入一个文件对象,还可以传入
一个布尔值,若为ture不清空文件,若为false或者不传
则先清空文件


File file = new File(“D:\b.txt”);
File file1 = new File(“D:\a.txt”);
FileReader fileReader=new FileReader(“D:\a.txt”);
FileWriter fileWriter=new FileWriter(file);
char[] buf=new char[10];
int length=0;
while((length=fileReader.read(buf))!=-1)
fileWriter.write(buf,0,length);
fileWriter.close();
fileReader.close();

2.缓冲字符输出流

作用:提高FileWriter的写数据效率,拓展FileWriter的功能

步骤:
1.找到目标文件
2.建立通道
3.创建BufferedWriter的对象,传入通道,还能传入一个
布尔值,true表示不清空原文件,false或者不传会清空
4.关闭BufferedWriter或者FileWriter都可以

这个方法,实际上是吧FileWriter原本的1kb大小的缓冲数
组,扩大到8kb
注意:数据是存储在缓冲数组中的,需要调用flush,或
close方法刷新到硬盘,或者数组存储慢也会自动刷新

扩展方法:newline(),输入一个换行符

使用字符流和字节流的情况:

使用字符流拷贝照片,因为有些码对应没有字符存在,
拷贝时返回的是一个位子字符对应的数字,未知字符占
一个字节,导致内存丢失,所以无法拷贝

使用字符流:需要输入输出我们能看懂的文字符号
使用字节流:拷贝图片等等,使用字节流拷贝文字时,
因为中文为两个字节,如果拷贝时,刚好拷贝到中间
位置,会导致文字丢失

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值