简单的Writer和Reader
Writer用于写出去到文件中,Reader用于将外面的文件读进来控制台
Writer和Reader有许多子类,但是子类大多都是直接运用父类Writer和Reader的方法,而且Writer和Reader的方法不多,而且有共性,所以只需弄懂Writer和Reader的方法即可。
Writer和Reader都是抽象类,所以想输入输出只能用他们的子类
Writer
Writer的主要方法
1.构造方法
以FileWriter为例
FileWriter(String filename,boolean append)
FileWriter(File filename,boolean append)
将FileWriter与File类对象关联起来,File对象又与实际对象关联起来,append是判断是否需要续写,如果不需要续写,则覆盖重写,append可以用filename.isFile()或(new File(filename)).isFile()来判断是否存在这个文件
其他构造方法没这个好,就不介绍了
2.写入数据
writer(xxxxx):void xxxxxxx=int\String\char
append(xxxxx):Writer xxxx=String
这两个方法没有什么不同
3.刷新
flush():void 刷新了之后才能把储存在流中的数据写到文件中
close():void 刷新后关闭该流
FileWriter里面有一个方法newLine();无视系统平台的不同而导致换行符的不同,跨平台性
Writer工作原理
将写入的数据先储存到缓冲区中,随着刷新而将缓冲区中的数据输入到文件中,刷新后缓冲区清空。这就是缓冲技术。
因此有了BufferedWriter
对BufferedWriter操作实际上是对与BufferedWriter关联的FileWriter类操作,所以对BufferedWriter进行flush和close实际上是对FileWriter进行flush和close
Reader
Reade读进来,只能一个一个字符去读!!,所以在这里缓冲技术就显得格外重要
Reader的主要方法
1.构造方法
以FileReader为例
FileReader(String file)
FileReader(File file)
在这里不想Writer那样(如果存在file,则覆盖),在这里如果存在file,不会覆盖,如果不存在file或者file是一个目录,则抛出FileNotFoundException
2.读入数据
read():int 读取单个字符,角标会自动往下移,当到达末尾时返回-1
read(char[] array)=int 读取单个字符,角标会自动往下移,array需要定义长度,当到达末尾时返回-1,否则返回读入数据的个数.
-1可以用来控制read进程
注意:
因为读取一个数就覆盖array中的一个位置,所以最后一个数组有点奇怪
所以此时就需要String(char[] array,int begin,int len),begin是开始在array储存的角标,len是读取数据的长度.
FileReader reader=new FileReader("haha.txt");
int len;
char[] array=new char[1024];
String words=null;//用来储存文本数据
while(len=reader.read(array)!=-1){words=words+new String(array,0,len);}
3.关闭
close(); void
在输入流中不需要刷新,因为数据都储存在了数组里面
但是这样子读取数据太麻烦了,于是这是就应该用缓冲技术
BufferedReader
重要方法
readLine():String
若已经到了末尾,则返回null,这就可以用来控制read进程
一行一行的去读
需要注意的是,换行符是不会读到的,也就是String中没有\r\n
此时可以自己加上换行符,也可以用System.out.prinln(xxxxx)
readLine()的原理
\r(回车)是回到行首
\n(换行)是到下一行去,但是不是行首
readLine()不包括任何行终结符
实际上是read,read读到行终结符就不储存到数组中,反之储存进入数组
package mypackage;
import java.util.*;
import java.io.*;
public class MyBufferedReader{private FileReader filereader=null;public MyBufferedReader(FileReader filereader)throws IOException{this.filereader=filereader;}public String readLine()throws IOException{int hasNext=0;ArrayList<Character> list=new ArrayList<Character>();String line=null;while((hasNext=filereader.read())!=-1){if(hasNext!=(int)'\r'&&hasNext!=(int)'\n'){list.add((char)hasNext);}else if(hasNext==(int)'\r'){continue;}else{break;}}for(char a:list){line=a+line;}return line;}public void close()throws IOException{this.filereader.close();}}
复制的原理
将文本中的数据缓存到Reader流中,再新建一个文件,用Writer释放出去
转载于:https://www.cnblogs.com/wewill/p/5588762.html
简单的Writer和Reader相关推荐
- java文件读写 outputstream_java IO文件读写例子(OutputStream,InputStream,Writer,Reader)...
一,File创建文件 File file = new File("D:" + File.separator + "yi.txt"); 代码示例: package ...
- Java I/O体系之Writer和Reader详细讲解
介绍: Writer是字符输出流的基类,Reader是字符输入流的基类.这两个类的实现类基本都是成对存在的,下面就成对讲解. 字节流与字符流区别请查看:字节流和字符流的区别 体系图: 对常见实现类AP ...
- Java IO: Reader And Writer
转载自 Java IO: Reader And Writer 译文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) Java IO的Reade ...
- Python CSV Reader/Writer 例子
我的网站 CSV(comma-separated values) 是跨多种形式导入导出数据的标准格式,比如 MySQL.Excel. 它以纯文本存储数和文本.文件的每一行就代表一条数据,每条记录包含了 ...
- Go编程技巧--io.Reader/Writer
Go原生的pkg中有一些核心的interface,其中io.Reader/Writer是比较常用的接口.很多原生的结构都围绕这个系列的接口展开,在实际的开发过程中,你会发现通过这个接口可以在多种不同的 ...
- go语言io reader_Go语言中的io.Reader和io.Writer以及它们的实现
在使用Go语言的过程中,无论你是实现web应用程序,还是控制台输入输出,又或者是网络操作,不可避免的会遇到IO操作,使用到io.Reader和io.Writer接口.也也许对这两个接口和相关的一些接口 ...
- golang io.Reader和io.Writer
文章目录 Reader和Writer bufio buffer Reader和Writer type Reader interface {Read(p []byte) (n int, err erro ...
- Reader和Writer
Writer用于写出去到文件中,Reader用于把外面的文件读进控制台 Writer和Reader有很多子类,但是子类大多都是直接运用父类Writer和Reader的方法,而且Writer和Reade ...
- golang中的io.Reader/Writer
本文整理自Go编程技巧–io.Reader/Writer Go原生的包中有一些核心的interface,其中io.Reader/Writer是比较常用的接口.很多原生的结构都围绕这个系列的接口展开,在 ...
最新文章
- AGX Xavier GPIO
- Struct 和 Class 性能有差异吗?自己测试
- GT Transceiver中的重要时钟及其关系(2)单个外部参考时钟使用模型
- Webservice入门教程_用CXF编写基于Spring的WebService
- 卸载mscs、活动目录、dns方法
- MapReduce中一次reduce方法的调用中key的值不断变化分析及源码解析
- Latex 安装与配置
- VISSIM二次开发(Python)大作业总结2
- 分享灵动微MM32F3270微控制器的音频类产品参考方案
- jsessionid和jwt_Jsessionid和cookie的区别与联系
- ubuntu软件默认安装位置
- 【路由器无线桥接的步骤实现】水星路由器MW150R作为副路由器无线桥接TP-Link主路由器
- java怎么获得今天日期,java怎么获取两年后的今天的日期
- BUUCTF [0CTF 2016] piapiapia
- 例说STM32F7高速缓存——Cache一致性问题(三)
- Android 100元平板也能吃鸡玩王者!小米平板刷机神盾dot1.2保姆级教程。
- 聚焦安稳易用,云和恩墨 MogDB 荣登“集中式数据库影响力指数”榜单
- 网页的兼容性解决办法
- EasyUI之Linkbutton按钮
- java 电子围栏_电子围栏
热门文章
- 《麻省理工科技评论》发布“21世纪迄今十大最糟科技”
- 麻省理工和 IBM 合作创立 Watson AI 实验室,谨慎推进 AI 研究
- 雷军的“初恋”回来了
- 计算机科班学习 OS 的正确姿势!
- c++ primer plus 学习笔记
- Vue 组件库 HeyUI@1.16.0 更新日志
- 我的zsh配置, 2019最新方案
- CPU被夺走的三种状态 执行时间久了 IO操作让cpu等待 被优先级高的抢占
- selectepoll
- jQuery通过ajax方法获取json数据不执行success的原因及解决方法