简单的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释放出去
简单的Writer和Reader的更多相关文章
- JavaIO(04)字符流--Writer and Reader
字符流: 常识:在java中一个字符等于两个字节: 操作字符流的两个类:Writer,Reader API文档介绍(Writer): public abstract class Write ...
- 字节流与字符流简单操作(OutputStream、InputStream、Writer、Reader)
操作流程 使用File类打开一个文件 通过字节流或者字符流的子类.指定输出的位置. 进行读/写操作 关闭输入/出 字节流与字符流 在java.io包中操作文件内容主要有两大类:字节流字符流.两大类分为 ...
- java IO文件读写例子(OutputStream,InputStream,Writer,Reader)
一,File创建文件 File file = new File("D:" + File.separator + "yi.txt"); 代码示例: package ...
- javaIO流--Writer,Reader
Writer /** *<li> Writer中定义的一个重要的方法: * public void writer(String str)throws IOException; */ pac ...
- 基于【字符】操作的IO接口:Writer、Reader
Reader public class BufferedReaderTest { public static void main(String[] args) throws IOException { ...
- JAVA IO包的整理---------Writer和Reader
一 Writer public abstract class Writer extends Object implements Appendable, Closeable, Flushable 这个类 ...
- 使用字符流(Writer、Reader)完成对文件的读写操作
字符流 字符输出流:Writer,对文件的操作使用子类FileWriter 字符输入流:Reader,对文件的操作使用子类FileReader 每次操作的是一个字符 文件字符操作流会自带缓存,默认大小 ...
- Java IO(十二) 字符流 Writer 和 Reader
Java IO(十二) 字符流 Reader和 Writer 一.介绍 涉及到文件(如果是纯文本文件形式)操作时,Java除了提供 FIle(文件和目录路径名的抽象表示形式) 和 FileDescri ...
- Python CSV Reader/Writer 例子--转载
CSV(comma-separated values) 是跨多种形式导入导出数据的标准格式,比如 MySQL.Excel. 它以纯文本存储数和文本.文件的每一行就代表一条数据,每条记录包含了由逗号分隔 ...
随机推荐
- 分享几个asp.net开发中的小技巧
下面这几个,是在实际开发或阅读中发现的一些问题,有些甚至是有很多年开发人员写出的代码,也是很多人经常犯的错误.各位可以看看,你有没有躺着中枪. 第一个,对整型变量进行非null判断. // a 是in ...
- CSS 魔法系列:纯 CSS 绘制各种图形《系列五》
我们的网页因为 CSS 而呈现千变万化的风格.这一看似简单的样式语言在使用中非常灵活,只要你发挥创意就能实现很多比人想象不到的效果.特别是随着 CSS3 的广泛使用,更多新奇的 CSS 作品涌现出来. ...
- Windows Azure Web Site (17) Azure Web Site 固定公网IP地址
<Windows Azure Platform 系列文章目录> 在之前的文档中,笔者介绍了Azure Web Site是一个多租户的环境,每个部署单元有一个可以通过Internet访问的入 ...
- Math.ceil(a/b)结果出错--原因是a和b不是double
脑袋短路.连续测试几次发现Math.ceil(188/20)==9; 忍无可忍,突然发现是int问题,顺着表达式走一遍,188/20==9,然后再向上取整.脑袋僵化了.看来一直做简单的不动脑筋的工作, ...
- 16个时髦的扁平化设计的 HTML5 & CSS3 网站模板
创建网站最好办法之一是使用现成的网站模板或使用开源 CMS 应用程序.所以,今天这篇文章给大家带来的是16款基于 HTML5 & CSS3 的精美的扁平风格网站模板,大家可以借助这些优秀的网站 ...
- Elasticsearch聚合 之 Terms
之前总结过metric聚合的内容,本篇来说一下bucket聚合的知识.Bucket可以理解为一个桶,他会遍历文档中的内容,凡是符合要求的就放入按照要求创建的桶中. 本篇着重讲解的terms聚合,它是按 ...
- ReflectionHelper
public static T GetInstance<T>(Assembly assembly, string fullNamespace) { return (T)assembly.C ...
- 使用Spark分析拉勾网招聘信息(三): BMR 入门
简述 本文,意在以最小的篇幅,来帮助对大数据和Spark感兴趣的小伙伴,能尽快搭建一个可用的Spark开发环境.力求言简意赅.文章,不敢自称BMR的最佳实践,但绝对可以帮助初学者,迅速入门,能够专心于 ...
- Hibernate —— Hibernate 配置文件
1.Hibernate 配置文件主要用于配置**数据库连接**和 Hibernate 运行时所需的**各种属性**. 2.每一个 Hibernate 配置文件对应一个 Configuration 对象 ...
- ES6笔记(6)-- Set、Map结构和Iterator迭代器
系列文章 -- ES6笔记系列 搞ES6的人也是够无聊,把JS弄得越来越像Java.C++,连Iterator迭代器.Set集合.Map结构都出来了,不知道说什么好... 一.简单使用 1. iter ...