(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 缓冲输出字符流 缓冲输出字符流作用: ...
随机推荐
- 蓝桥网试题 java 基础练习 特殊回文数
------------------------------------------------------------------------------------- 简单点,对话的方式简单点 有 ...
- hadoop系列二:HDFS文件系统的命令及JAVA客户端API
转载请在页首明显处注明作者与出处 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6 ...
- 学习 OpenStack 的方法论 - 每天5分钟玩转 OpenStack(150)
作为 OpenStack 的核心教程,我们已经到了最后总结的部分. OpenStack 目前已经有好几十个模块,本教程讨论的是最最重要的核心模块:Keystone,Nova,Glance,Cinder ...
- linux系统盘使用率达到100%的问题查找和解决方法
今天公司云服务器报警系统发来短信,系统磁盘空间不够,登录服务器进行查看,磁盘使用虑达到100%, 感觉比较奇怪,所存的东西并不多,怎么会将磁盘占满,而且数据都是存在数据盘下,通过简单的进行 ...
- js-tab选项卡
说道tab选项卡,顾名思义,就是切换不同内容分类,想必学过前端的都知道,tab有很多方法可以实现,最近刚跟师傅学了一种,感觉很简便,很实用哦. 一.先看一下结果 二.可以根据图来布局,首先上面标 ...
- C语言的函数类型
C语言的函数类型与返回值类型不一致时出现,是以函数类型为标准; 而如果在java与c#语言中上述情况是编译错误的;
- 面向UI编程:ui.js 1.1 使用观察者模式完成组件之间数据流转,彻底分离组件之间的耦合,完成组件的高内聚
开头想明确一些概念,因为有些概念不明确会导致很多问题,比如你写这个框架为什么不去解决啥啥啥的问题,哎,心累. 什么是框架? 百度的解释:框架(Framework)是整个或部分系统的可重用设计,表现为一 ...
- 怎么监控apache运行状态和页面统计
通过使用mod_status的模块来监控Apache web server的负载. 1. mod_status是什么? mod_status是一个apache模块,它帮助监控web server负载和 ...
- Python 接口测试(三)
四:python接口之http请求 python的强大之处在于提供了很多的标准库以及第三库,本文介绍urllib 和第三库的requests. Urllib 定义了很多函数和类,这些函数和类能够帮助我 ...
- [Hadoop] - SSH免密码登录
在安装hadoop之前需要进行ssh免密码登录,ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以Redhat为例. 我这里只采用一台机器A(10. ...