(19)IO流之字符流FileReader和FileWriter,缓冲字符流

阅读: 评论:0

(19)IO流之字符流FileReader和FileWriter,缓冲字符流

(19)IO流之字符流FileReader和FileWriter,缓冲字符流

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

字符流

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

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

 

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

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

 

FIleReader的用法:

1、找到目标文件

2、建立数据的输入通道

3、读取数据

4、关闭资源

FileWriter的使用注意事项

1、FileWriter写数据的时候,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 = ad(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

 

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

 

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

 

转载于:.html

本文发布于:2024-01-29 12:03:57,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170650104215149.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:字符   IO   FileReader   FileWriter
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23