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释放出去
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
分享到:
相关推荐
emv reader writer scanner
Java IO流里面 Reader Writer 方法
reader and writer---操作系统之课程设计 reader and writer---操作系统之课程设计 reader and writer---操作系统之课程设计
emv software for computers
x2 5_writer_reader_software_x2_x2software.zip
用Reader和Writer将一个文件从一个地方复制到另一个地方
x2 5_writer_reader_software_x2_x2software_源码.zip
IO流05:Writer、Reader练习* 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中* 数据源:* 目的地:public cl
OFD Reader & Writer 开源的OFD处理库,支持文档生成、数字签名、文档保护、文档合并、转换、导出等功能
一个比较好用的Bitmap Image Reader Writer Library 。该库只有一个hpp文件,跟CImg有几分相似(但功能没有CImg丰富,可满足日常开发的基本需求足够)。该库不仅可以很方面的进行bmp文件的读写操作,而且还可以进行...
基于java的线程的练习 用于实现读者和写者问题。 程序自动向文本里写入数据。 java 线程 源代码 读者 写者
通过研究Linux的线程机制和信号量实现读者写者(Reader-Writer)问题并发控制。每人一台与Linux主机联网的Windows主机,普通用户权限。
Uwes S7 MMC Image Reader V0.95用于对S7-300的MMC储存卡数据读出,可以用作备份MMC数据 Uwes S7 MMC Image Writer V0.9用于对S7-300的MMC储存卡数据写入,可以用作恢复
EMV Reader Writer_EmvREADERwriter_EMV_EMVReader,Writer_EMVReader
EMV Writer Reader Software v8_EmvREADERwriter_EMV_emvv8.zip
带有进度和剩余时间估计的io.Reader和io.Writer
EMV Writer Reader Software v8_EmvREADERwriter_EMV_emvv8_源码.zip