IO流学习笔记(一)之FileWriter与FileReader
IO流用来处理设备之间的数据传输 
Java对数据的操作是通过流的方式 
Java用于操作流的对象都在IO包中
流按照操作数据分为两种:字节流和字符流 
流按流向分为:输入流和输出流
输入流和输出流是相对于内存设备而言
因为内存速度快,程序在内存中运行,数据从外设(硬盘)读取到内存中为输入,数据由内存到外设(硬盘)为输出
字符流的由来:
字节流可以处理所有数据,最早是没有字符流的,但是由于不同语言产生了多张码表(用于将其语言转为计算机语言即01码,如ascll,GBK等),由于多张码表的麻烦,国际组织便产生一张通用的码表Unicode码表,可以识别中英文等,Java中内置Unicode码表。其特点是无论什么字符都用两个字节表示,导致同一个中文在GBK和Unicode码表中对应的数字结果不同(因为对于编写程序选择不同编码方式会产生乱码),将(字节流+编码表)的组合方式封装为字符流。
简要来说:字节流读取文字字节数据后,不直接操作,而是先查指定的编码表,获取对应的文字,再对这个文字进行操作。简单来说,就是字节流+编码表。
分类: 
字节流的抽象基类:InputStream,OutputStream
字符流的抽象基类:Reader,Writer
注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀,如InputStream的子类FileInputStream,Reader的子类FileReader
命名方式可以看作:该对象的功能+以父类名作为后缀
操作文字数据建议优先考虑字符流,而且要将数据从内存写到硬盘上,要使用字符流中的输出流Writer类,将数据从内存写到硬盘上,硬盘上的数据基本体现是文件,希望找到一个可以操作文件的Writer,即FileWriter
既然是往一个文件中写入文字数据,那么在创建对象时,必须明确该文件(用于存储数据的目的地),如果文件不存在,则会自动创建;如果文件存在,则会被覆盖,由于文件路径可能是非法路径,会导致IO异常,因此在方法处抛出,即throws
IOException
构造函数:
FileWriter(String fileName):根据给定的文件名构造一个FileWriter对象
FileWriter(String fileName,boolean
append):根据给定的文件名以及指示是否附加(续写)写入数据的boolean值来构造FileWriter对象,构造函数中加入true,可以实现对文件进行续写,不然第二次运行程序会删除原有内容,续写,即可以再次运行写入时,是在原有的基础上基础写入,原内容是保存的
flush()与close()区别:
flush()方法:刷新该流的缓冲,如果该流已保存缓冲区中各种write()方法的所有字符,则立即将它们写入预期目标。然后,
如果该目标是另一个字符或字节流,则将其刷新。因此,一次flush()调用将刷新Writer和OutputStream链中的所有缓冲区,因此上述写入也可以:
close()关闭流,关闭资源。在关闭前会先调用flush刷新缓冲中的数据到目的地
与flush()的区别:flush可以使用多次,不断写入不断刷新即可,而close只可以使用一次,关闭之后,不可以进行流操作。
形象比喻:在一个文档中写数据,每保存一次就相当于进行一次flush(不保存并没有写入硬盘);如果一直写不保存,写完之后关闭,进行一次保存,写入硬盘,相当于close,再打开文件操作时,是另一个流。
换行问题:
并不能实现换行,windows中的换行是\r,unix中换行是\n,因此需要,还有一种与系统无关的换行方式:
进行读取有两种方式,一种是read()方法,一种是read(char[] cbuf)方法,如下将分别介绍两种方法:
public int read() throws IOException:
读取单个字符,在字符可用,发生I/O错误或者已到达流的末尾前,此方法一直阻塞
返回:作为整数读取的字符,范围在0到65535之间,如果已到达流的末尾,则返回-1
运行结果:
原理: 
基于如上原理可以如下进行连续读取,即连续读取数据的第一种方式,一次读一个
public int read(char[] cbuf) throws IOException:
将字符读入数组。在某个输入可用,发生I/O错误或者已到达流的末尾前,此方法一直阻塞 
参数: 
cbuf-目标缓冲区 
返回:
读取的字符数(不同于read()方法,read()方法返回的是读到的字符),商务英语前景如果已到达流的末尾,则返回-1
不同于read(),read(char[] cbuf)是每读取一个便将其存与数组cbuf中
原理:
基于第二种读取方式的连续读取:
两种读取方式哪种好?
第二种读取所需的循环次数少,效率高,第一种方式有多少个字符就需要循环多少次
两个流(输入流fr与输出流fw)原本是没有关系的,想要使两者能够进行数据传输,需要通过一个“中转”即上述的数组容器
IO流学习笔记(一)之FileWriter与FileReader的更多相关文章
- JAVA.IO流学习笔记
		
一.java.io 的描述 通过数据流.序列化和文件系统提供系统输入和输出.IO流用来处理设备之间的数据传输 二.流 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数 ...
 - IO流学习笔记(二)之BufferedWriter与BufferedReader及实例Demo
		
在之前的学习笔记(http://blog.csdn.net/megustas_jjc/article/details/72853059)中,FileWriter与FileReader的Demo使用的中 ...
 - IO流学习笔记
		
1.File类 文件和目录路径名的抽象表示形式. 4种构造方法 File(File parent, String child) File(File parent, String child) File ...
 - Java IO流学习总结(1)
		
Java IO流学习总结 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本 ...
 - Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter
		
在上一篇文章中Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream介绍了缓冲流中的字节流,而这一篇着重介绍缓冲流中字符流Buffered ...
 - Java IO流学习总结一:输入输出流
		
Java IO流学习总结一:输入输出流 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54292148 本文出自[赵彦军的博客] J ...
 - Java IO流学习
		
Java IO流学习 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是 ...
 - Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream
		
Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...
 - Java IO流学习总结八:Commons IO 2.5-IOUtils
		
Java IO流学习总结八:Commons IO 2.5-IOUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/550519 ...
 
随机推荐
- 在 CentOS 7.5 64位上使用 yum 安装 MySQL 8.0
			
前段时间在 CentOS 7.5 64位上安装 MySQL 8.0.查了些资料,在这里记录一下详细的安装和设置步骤. 一.安装 使用yum安装MySQL之前需要先下载对应的.rpm文件,下载方法: 去 ...
 - Drupal Drupalgeddon 2 远程代码执行漏洞(CVE-2018-7600)
			
影响版本 Drupal 6.x,7.x,8.x Drupal 是一款用量庞大的CMS,其6/7/8版本的Form API中存在一处远程代码执行漏洞 脚本检测
 - 在Java开发工具的project中使用相对路径
			
1.在project中,相对路径的根目录是project的根文件夹,在此就是repathtest文件夹了.创建文件的写法是: File f = new File("src/com/lavas ...
 - 四、从GitHub浏览Prism示例代码的方式入门WPF下的Prism之Mvvm的13示例
			
上一篇之分析了示例,没有最终写DEMO,把这一篇分析完,总结后一起写Prism下的MVVM例子. 这一篇开始分析从13示例开始,分析到MVVM主要部分结束然后写一个分析后的总结DEMO 添加一段新的内 ...
 - Spring Security中实现微信网页授权
			
微信公众号提供了微信支付.微信优惠券.微信H5红包.微信红包封面等等促销工具来帮助我们的应用拉新保活.但是这些福利要想正确地发放到用户的手里就必须拿到用户特定的(微信应用)微信标识openid甚至是用 ...
 - 如何删除windows10右键新建中不需要的选项
			
参考博客https://blog.csdn.net/Kinglen_R/article/details/102983259 首先打开注册表程序,可以点击开始按钮后直接输入regedit点击进入 (或者 ...
 - MySQL-13-日志管理
			
常用日志参数 经常用到的有错误.快慢查询.二进制等日志 错误日志 1 作用 记录启动\关闭\日常运行过程中,状态信息,警告,错误,排查MySQL运行过程的故障 2 错误日志配置 默认就是开启的: /数 ...
 - SpringBoot开发三
			
需求介绍-SpringMVC 服务层的三层架构:表现层,业务层,数据层,浏览器访问服务器先访问表现层,期待表现层返回一些数据,表现层呢就访问业务层处理业务,而业务层在处理业务的时候会调用数据层请求数据 ...
 - 武器级工具包 Immunity Canvas 7.26 泄露事件 | 附下载地址
			
关于Immunity Canvas Immunity CANVAS是Immunity公司的一款商业级漏洞利用和渗透测试工具,包含了480多个以上的漏洞利用,该工具并不开源,其中文版介绍如下: &quo ...
 - 蓝桥杯练习-各大OJ平台介绍
			
校赛准备的不够充分,简单题失分太遗憾, 有幸参加到省赛,这次先码一下练习平台,等学期结束忙完之后好好练习! 1.题库与网站资源题库-在线提交系统(Online Judge)简介 下面是几个比较大的 ...