字符流,读取的文件是字符的时候,有两个基类一个是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从图片中读取到的数据会先到码表中找映射到的字符,但是有些是没有字符映射的,那么会返回一个未知字符对应的

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

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

 public static void copyText() throws IOException
{
//找到目标文件
File inFile = new File("E:\\ebook\\海边的卡夫卡.txt");
File outFile = new File("D:\\海边的卡夫卡副本.txt");
//建立数据通道
FileReader fileReader = new FileReader(inFile);
FileWriter fileWriter = new FileWriter(outFile);
//建立缓冲字符数组
int length = ;
int wordCount = ;
char[] buf = new char[];
while((length = fileReader.read(buf))!=-)
{
wordCount += length;
fileWriter.write(buf, , length);
}
fileWriter.close();
fileReader.close();
System.out.println("wordCount = "+wordCount);
}

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

使用字符流的应用场景?

如果是读写字符数据的时候,比如你看到到的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()写入一个分分行符,就这么多

(19)IO流之字符流FileReader和FileWriter,缓冲字符流---缓冲输入字符流BufferedReader和缓冲输出字符流BufferedWriter的更多相关文章

  1. J04-Java IO流总结四 《 FileReader和FileWriter 》

    FileReader和FileWriter的源码相对简单,下面通过分析它们的源码以更好地进行理解这两个流 1. FileReader FileReader实现了读取底层的字节数据并将其转换为字符数据的 ...

  2. java-IO流-字符流-FileReader、FileWriter、自定义小数组的拷贝、BufferedReader、BufferedWriter、readLine()和newLine()方法、LineNumberReader、使用指定的码表读写字符

    ###21.01_IO流(字符流FileReader) * 1.字符流是什么     * 字符流是可以直接读写字符的IO流     * 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要 ...

  3. java io系列22之 FileReader和FileWriter

    FileReader 是用于读取字符流的类,它继承于InputStreamReader.要读取原始字节流,请考虑使用 FileInputStream.FileWriter 是用于写入字符流的类,它继承 ...

  4. [十八]JavaIO之FileReader 和 FileWriter

    简介 FileReader FileWriter 都是提供操作文件的便捷类 这两个类的实现非常的简单 原理 回忆下之前的InputStreamReader和OutputStreamWriter Inp ...

  5. java中OutputStream字节流与字符流InputStreamReader 每一种基本IO流BufferedOutputStream,FileInputStream,FileOutputStream,BufferedInputStream,BufferedReader,BufferedWriter,FileInputStream,FileReader,FileWriter,InputStr

    BufferedOutputStream,FileInputStream,FileOutputStream,BufferedInputStream,BufferedReader,BufferedWri ...

  6. io流(文件字符流(FileReader,FileWriter文件的复制))

    文件字符流(FileReader,FileWriter文件的复制) 文件的复制 效率低的方法 注意:字符流需要刷新操作,字节流不需要,只有刷新后才可以将程序中的内容导入到目标文件中 package c ...

  7. java基础46 IO流技术(输出字符流/缓冲输出字符流)

    一.输出字符流 1.1.输出字符流体系 --------| Writer:输出字符流的基类(抽象类)  ----------| FileWriter:向文件输出数据输出字符流(把程序中的数据写到硬盘中 ...

  8. 对比字节流和字符流,回答为什么FileReader不能用来拷贝图片

    FileReader是输入字符流,拷贝文件没问题,但拷贝图片就有问题了. 假设是在windows下,FileReader用的是GBK码表,一个字符最多用2个字节代表.2个字节就是2的16次方,即有65 ...

  9. Day 17:缓冲输出字符流和用缓冲输入输出实现登录、装饰者设计模式

    输出字符流 Writer  所有输出字符流的基类,  抽象类. FileWriter 向文件输出字符数据的输出字符流. BufferedWriter 缓冲输出字符流        缓冲输出字符流作用: ...

随机推荐

  1. Syslog4j如何实现接收日志

    1.Syslog4j是一个实现Syslog(RFC3164)协议的Java开源类库包括客户端与服务器端.通过 UDP/IP, TCP/IP, TCP/IPover SSL/TLS, Unix Sysl ...

  2. Java性能优化_转载

    一.避免在循环条件中使用复杂表达式 1.在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 2.不可使用多层循嵌套. 二.集合大 ...

  3. Swift 2.0 字符串学习笔记(建议掌握OC字符串知识的翻阅)

    自己公司开现在使用OC语言在写,但Swift似乎是苹果更推荐使用的开发语言,估计也是未来开发的趋势,自己以前有接触swift,但又由于公司的项目赶,也没有时间去好好地学习这款开发语言.现在年底了,项目 ...

  4. 计算机程序的思维逻辑 (66) - 理解synchronized

    上节我们提到了多线程共享内存的两个问题,一个是竞态条件,另一个是内存可见性,我们提到,解决这两个问题的一个方案是使用synchronized关键字,本节就来讨论这个关键字. 用法 synchroniz ...

  5. 一个技术汪的开源梦 —— 微信开发工具包(WeixinSDK)

    由于春节的关系 WeixinSDK 这个开源项目的进展比预期推迟了大约一个月的时间,值得高兴的是到目前为止该项目的重要模块已经开发完毕.  - 关于项目 该项目的背景是现在微信公众号.微信服务号乃至微 ...

  6. C++用new创建对象和不用new创建对象的区别解析

    在C++用new创建对象和不用new创建对象是有区别的,不知你是否清楚的了解它们到底有什么样的区别呢?下面小编就用示例来告诉大家吧,需要的朋友可以过来参考下   我们都知道C++中有三种创建对象的方法 ...

  7. Python爬虫爬取qq视频等动态网页全代码

    环境:py3.4.4 32位 需要插件:selenium BeautifulSoup xlwt # coding = utf-8 from selenium import webdriverfrom ...

  8. Spring+SpringMVC+MyBatis+easyUI整合基础篇(二)牛刀小试

    承接上文,该篇即为项目整合的介绍了. 废话不多说,先把源码和项目地址放上来,重点要写在前面. github地址为ssm-demo 你也可以先体验一下实际效果,点击这里就行啦 账号:admin 密码:1 ...

  9. 从源码解析LinkedList集合

         上篇文章我们介绍了ArrayList类的基本的使用及其内部的一些方法的实现原理,但是这种集合类型虽然可以随机访问数据,但是如果需要删除中间的元素就需要移动一半的元素的位置,效率低下.并且它内 ...

  10. Linux配置vnc

    yum install tigervnc-server vim /etc/sysconfig/vncservers 查看配置文件,修改最后面两行配置文件参数如下: VNCSERVERS="1 ...