(19)IO流之字符流FileReader和FileWriter,缓冲字符流---缓冲输入字符流BufferedReader和缓冲输出字符流BufferedWriter
字符流,读取的文件是字符的时候,有两个基类一个是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的更多相关文章
- J04-Java IO流总结四 《 FileReader和FileWriter 》
FileReader和FileWriter的源码相对简单,下面通过分析它们的源码以更好地进行理解这两个流 1. FileReader FileReader实现了读取底层的字节数据并将其转换为字符数据的 ...
- java-IO流-字符流-FileReader、FileWriter、自定义小数组的拷贝、BufferedReader、BufferedWriter、readLine()和newLine()方法、LineNumberReader、使用指定的码表读写字符
###21.01_IO流(字符流FileReader) * 1.字符流是什么 * 字符流是可以直接读写字符的IO流 * 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要 ...
- java io系列22之 FileReader和FileWriter
FileReader 是用于读取字符流的类,它继承于InputStreamReader.要读取原始字节流,请考虑使用 FileInputStream.FileWriter 是用于写入字符流的类,它继承 ...
- [十八]JavaIO之FileReader 和 FileWriter
简介 FileReader FileWriter 都是提供操作文件的便捷类 这两个类的实现非常的简单 原理 回忆下之前的InputStreamReader和OutputStreamWriter Inp ...
- java中OutputStream字节流与字符流InputStreamReader 每一种基本IO流BufferedOutputStream,FileInputStream,FileOutputStream,BufferedInputStream,BufferedReader,BufferedWriter,FileInputStream,FileReader,FileWriter,InputStr
BufferedOutputStream,FileInputStream,FileOutputStream,BufferedInputStream,BufferedReader,BufferedWri ...
- io流(文件字符流(FileReader,FileWriter文件的复制))
文件字符流(FileReader,FileWriter文件的复制) 文件的复制 效率低的方法 注意:字符流需要刷新操作,字节流不需要,只有刷新后才可以将程序中的内容导入到目标文件中 package c ...
- java基础46 IO流技术(输出字符流/缓冲输出字符流)
一.输出字符流 1.1.输出字符流体系 --------| Writer:输出字符流的基类(抽象类) ----------| FileWriter:向文件输出数据输出字符流(把程序中的数据写到硬盘中 ...
- 对比字节流和字符流,回答为什么FileReader不能用来拷贝图片
FileReader是输入字符流,拷贝文件没问题,但拷贝图片就有问题了. 假设是在windows下,FileReader用的是GBK码表,一个字符最多用2个字节代表.2个字节就是2的16次方,即有65 ...
- Day 17:缓冲输出字符流和用缓冲输入输出实现登录、装饰者设计模式
输出字符流 Writer 所有输出字符流的基类, 抽象类. FileWriter 向文件输出字符数据的输出字符流. BufferedWriter 缓冲输出字符流 缓冲输出字符流作用: ...
随机推荐
- 深入探讨 ECMAScript 规范第五版
深入探讨 ECMAScript 规范第五版 随着 Web 应用开发的流行,JavaScript 越来越受到开发人员的重视.作为 ECMAScript 的变体,JavaScript 语言的很多语法特性都 ...
- yum安装CDH5.5 Hadoop集群
1.环境说明 系统环境: 系统环境:centos6.7 Hadoop版本:CDH5.5 JDK运行版本:1.7.0_67 集群各节点组件分配: 2.准备工作 安装 Hadoop 集群前先做好下面的准备 ...
- 通过实例解释LinuxC下argc,argc[]的意义
MarkdownPad Document html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,ab ...
- 【thinkphp 5 在nginx 环境下路由无法生效(404 500错误 )的解决方法】
非常惭愧的说,由于之前一直使用的是windowservice,安装apache来进行服务器布置的,这种方式也是最简单最直接的方式, 但是由于php的服务大多都是linux栈的,咱们也不能落后呀,在 ...
- 学习计划(一)——JavaScript
一:与前端之缘 大一时除了上课和社团外不知道要学点什么,但是又不想睡觉打游戏,常常就是啥都想学,photoshop,premiere,After Effects都学,但始终没有明确的目标. 大二时一直 ...
- asp.net权限认证:OWIN实现OAuth 2.0 之密码模式(Resource Owner Password Credential)
asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...
- context:annotation-config, mvc:annotation-driven, context:compont-scan 区别
当我们需要使用BeanPostProcessor时,直接在Spring配置文件中定义这些Bean显得比较笨拙,例如: 使用@Autowired注解,必须事先在Spring容器中声明AutowiredA ...
- 设置tableView的分割线填满cell的方式总结
方式一:cell的底部添加一个UIView 1.在tableViewController的viewDidLoad中取消系统的分割线 // 取消系统的分割线 self.tableView.separat ...
- C语言字节数组转换为基本数据类型
首先,必须明确基本类型在不同环境下字节的大小 这里用到了unsigned char:1 int:4 double:8 自己主要想用的是将字节数组转换为int型,double型 具体来说,将接收到的 ...
- 从C#到TypeScript - 装饰器
总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript ...