黑马程序员——基础知识——字符流

来源:互联网 发布:姜大声 知乎 编辑:程序博客网 时间:2024/06/07 05:07
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

Day21

21.01 字符流FileReader

       Reader和Writer是字符流的抽象基类

       Reader

              InputStreamReader

                     FileReader方法都来自父类

       1、字符流是什么

              字符流是可以直接读写字符的IO流

              计算机存储的是字节

              字符流读取字符,就要先读取到字节数据,然后转为字符,如果要写出

字符,需要把字符转为字节再写出,其中间有一个转换动作。

       2、FileReader

              FileReader类的read方法可以按照字符大小读取


21.02 字符流FileWriter

       Writer

              OutputStreamWriter

                     FileWriter方法都来自父类

       FileWriter类的write方法可以自动把字符转为字节输出


21.03 字符流的拷贝


21.04 什么情况下使用字符流

       1、字符流也可以拷贝文本文件,但不推荐使用,因为读取时会把字节转为字符,写出时还要把字符转回字节

       无论拷贝纯文本,还是非文本,都建议用字节流,因为字符流麻烦,会先将字节转为字符,再将字符转为字节。而字节流一直操作的就是字节。

       2、程序需要读取一段文本,或者需要写出一段文本的时候可以使用字符流

       即只读或只写的时候用字符流

字符流读取中文不会出现半个中文,因为是通过码表(字符的大小)去读的,直接读取一个中文。

写出的时候可以直接将字符串写出,不用转换为字节数组

 

21.05 字符流是否可以拷贝非纯文本的文件

       不可以拷贝非纯文本的文件

       因为在读的时候会将字节转换为字符,在转换过程中,两个字节连起来后可能不是字符即找不到对应的字符,就会用?代替,写出的时候会将字符转换成字节写出去,如果是?的话,会将?直接写出,就使得一部分字节没有写过去,这样写出之后的文件就乱了,看不了了。

 

21.06 自定义字符数组的拷贝



21.07 带缓冲的字符流

       构造中需要接收Reader,即其子类对象,相当于装饰。

       1、BufferedReader的read方法读取字符时会一次读取若干字符到缓冲区,然后逐个返回给程序,降低到硬盘读取文件的次数,在内存中进行一系列动作,提高效率。

       2、BufferedWriter的write方法写出字符时会先写到缓冲区,缓冲区写满时才会写到文件,降低到硬盘写文件的次数,提高效率


21.08 readLine和newLine方法

       BufferedReader的readLine方法可以读取一行字符(不包含换行符号)

       BufferedWriter的newLine可以输出一个跨平台的换行符号“\r\n”


21.09 将文本反转

       1、将一个文本文档上的文本反转,第一行和倒数第一行交换,第二行和倒数第二行交换,以此类推。


21.10 LineNumberReader

       LineNumberReader是BufferedReader的子类,具有相同的功能,并且可以统计行号。默认情况下,行编号从 0 开始。要注意的是,setLineNumber(int) 不会实际更改流中的当前位置;它只更改将由 getLineNumber() 返回的值。

       调用getLineNumber方法可以获取当前行号

       调用setLineNumber方法可以设置当前行号

      

就是使输出的文本前面多了一个行号


21.11 装饰设计模式

       设计模式其实就是一种套路,相当于肯德基、麦当劳等快餐店的模式,方便使用和推广。

       装饰设计模式,原来功能不够强大,现在让其功能更加强大


21.12 使用指定的码表读写字符

       FileReader是使用默认码表读取文件,如果需要使用指定码表读取,那么可以使用InputStreamReader(字节流,编码表)

       FileWriter是使用默认码表写出文件,如果需要使用指定码表写出,那么可以使用OutputStreamWriter(字节流,编码表)

       Gbk中一个中文代表两个字节,Utf-8中一个中文代表三个字节

      

       InputStreamReader是字符流,是字节流通向字符流的桥梁

OutputStreamWriter是字符流,是字符流通向字节流的桥梁


21.13 转换流图解

       画图分析转换流


21.14 获取文本上字符出现的次数

       获取一个文本上每个字符出现的次数,将结果写在times.txt上


21.15 试用版软件

       当我们下载一个试用版软件,没有购买正版的时候,每执行一次就会提醒我们还有多少次使用机会。用学过的IO流只是,模拟试用版软件,使用10次机会,执行一次就提醒一次您还有几次机会,    如果次数到了提示请购买正版


21.16 (File类)递归

       5的阶乘


21.17 练习

       需求:从键盘输入接收一个文件夹路径,打印出该文件夹下所有的.Java文件名



0 0
原创粉丝点击