(19)IO流之字符流FileReader和FileWriter,缓冲字符流---缓冲输入字符流BufferedReader和缓冲输出字符流BufferedWriter...

字符流,读取的文件是字符的时候,有两个基类一个是Reader,一个是Writer这有点拟人的感觉,人直接看懂的是文字

字符流

字节流:读取的是文件中的二进制字节流并不会帮你转换成看的懂得字符

字符流:字符流会把读到的二进制的数据进行对应的编码解码工作。 字符流 = 字节流+编码(解码)

 

输入字符流
Reader 输入字符流的基类 抽象类

|——FileReader 读取文件的输入字符流

 

FIleReader的用法:

1、找到目标文件

2、建立数据的输入通道

3、读取数据

4、关闭资源

FileWriter的使用注意事项

1FileWriter写数据的时候,FileWriter内部维护了一个1024个字节的数组,写数据的时候,会先写入到它内部维护的字符数组,如果需要把数据真正写到硬盘上,需要调用flush方法

或者close方法或者内部数组存满时,才会把缓冲数组中的内容写入到硬盘。

2、使用FileWriter的时候,如果目标文件不错在会自动创建文件,

3、如果目标文件已存在,默认情况会先清空文件中的数据,在写入数据,如果需要在原来的基础上追加数据。需要舒勇构造函数

new FileWriter(file, true)

使用字符流拷贝图片会导致图片数据丢失,图片变小,而无法显示。

FileReader默认的是gbk编码,gbk是两个字节共可表示65536个字符,但是并非一共这么多的码子,有些是空的无法表示。

每当reader从图片中读取到的数据会先到码表中找映射到的字符,但是有些是没有字符映射的,那么会返回一个未知字符对应的

数字,而为之字符占一个字节。这样就导致了数据的丢失。

使用字符流拷贝文本文件:

 

 1 public static void copyText() throws IOException 
 2     {
 3         //找到目标文件
 4         File inFile = new File("E:\\ebook\\海边的卡夫卡.txt");
 5         File outFile = new File("D:\\海边的卡夫卡副本.txt");
 6         //建立数据通道
 7         FileReader fileReader = new FileReader(inFile);
 8         FileWriter fileWriter = new FileWriter(outFile);
 9         //建立缓冲字符数组
10         int length = 0;
11         int wordCount = 0;
12         char[] buf = new char[1024];
13         while((length = fileReader.read(buf))!=-1)
14         {
15             wordCount += length;
16             fileWriter.write(buf, 0, length);
17         }
18         fileWriter.close();
19         fileReader.close();
20         System.out.println("wordCount = "+wordCount);
21     }

 

何时使用字符流,何时使用字节流?依据是什么?

使用字符流的应用场景?

如果是读写字符数据的时候,比如你看到到的abcd日月水火等

字节流的应用场景?

如果读写的数据都不需要转换成字符的时候比如声音文字视频,则使用字节流。

 

输入字符流

 

Reader 输入字符流的基类 抽象类

 

|——FileReader 读取文件的字符流

 

|——BufferedReder 缓冲输入字符流,为了提高侮辱数据的效率和扩张了FileReader的功能。

 

| 该类内部也是维护了一个字符数组。多了一个readLine()的方法

 

 

 

BufferedReader缓冲输入字符流的使用步骤

 

1、找到目标文件

 

2、建立数据的输入通道

 

3、读取数据

 

4、关闭资源

 

 

 

 

 

输出字符流

 

Writer 所有输出流的基类 抽象类

 

|——FileWriter 向文件输出字符数据的输出字符流

 

|——BufferWriter缓冲输出字符流 缓冲输出字符流主要作用提高FileWriter的写数据的效率和团战FielWriter的功能

 

 

 

BufferWiter的使用步骤

 

1.找到目标文件

 

2、建立数据输出通道

 

3、建立缓冲输出流

 

4、写出数据

 

5、别忘了使用flush或者close

 

 

 

注意:BufferedWriter类的设计稍微有一点失败,这个类和FileWriter类的功能完全一样,不同之处在于,BufferedWriter

 

维护的内部缓冲数组更大一些,8kBFileWriter类的内部缓冲数组是1kB,此外,BufferedWriter内部缓冲数组的大小可以使用

 

构造函数来制定,neLine()写入一个分分行符,就这么多

 

转载于:https://www.cnblogs.com/OliverZhang/p/6025436.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值