博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单的Writer和Reader
阅读量:6569 次
发布时间:2019-06-24

本文共 2756 字,大约阅读时间需要 9 分钟。

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
list=new ArrayList
(); 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

你可能感兴趣的文章
mysql-锁表机制分析(转)
查看>>
Zabbix3.0安装与部署(centos7)
查看>>
layerdate一款很好用日期插件
查看>>
Eclipse中Errors occurred during the build最简单的解决方法
查看>>
(转) 为什么选择.NETCore?
查看>>
phpexcel科学计数法
查看>>
python 简单了解namedtuple
查看>>
【转】CSDN离线网页html文件自动跳转
查看>>
Linux I/O优化 磁盘读写参数设置
查看>>
Downloadmanager实现app实现的升级下载使用
查看>>
注解,多线程
查看>>
联合体以及如何调出内存窗口
查看>>
Cstring到string
查看>>
关于对编译原理第二次作业的总结
查看>>
2.python基础——math(转载)
查看>>
web前端知识总结
查看>>
Storm
查看>>
HDU-1058 Humble Numbers 暴力 Or 动态规划
查看>>
Redis4.0支持的新功能说明
查看>>
echo,print(),print_r(),sprintf(),var_dump()的区别
查看>>