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的更多相关文章

  1. JavaIO(04)字符流--Writer and Reader

    字符流:   常识:在java中一个字符等于两个字节:   操作字符流的两个类:Writer,Reader   API文档介绍(Writer): public abstract class Write ...

  2. 字节流与字符流简单操作(OutputStream、InputStream、Writer、Reader)

    操作流程 使用File类打开一个文件 通过字节流或者字符流的子类.指定输出的位置. 进行读/写操作 关闭输入/出 字节流与字符流 在java.io包中操作文件内容主要有两大类:字节流字符流.两大类分为 ...

  3. java IO文件读写例子(OutputStream,InputStream,Writer,Reader)

    一,File创建文件 File file = new File("D:" + File.separator + "yi.txt"); 代码示例: package ...

  4. javaIO流--Writer,Reader

    Writer /** *<li> Writer中定义的一个重要的方法: * public void writer(String str)throws IOException; */ pac ...

  5. 基于【字符】操作的IO接口:Writer、Reader

    Reader public class BufferedReaderTest { public static void main(String[] args) throws IOException { ...

  6. JAVA IO包的整理---------Writer和Reader

    一 Writer public abstract class Writer extends Object implements Appendable, Closeable, Flushable 这个类 ...

  7. 使用字符流(Writer、Reader)完成对文件的读写操作

    字符流 字符输出流:Writer,对文件的操作使用子类FileWriter 字符输入流:Reader,对文件的操作使用子类FileReader 每次操作的是一个字符 文件字符操作流会自带缓存,默认大小 ...

  8. Java IO(十二) 字符流 Writer 和 Reader

    Java IO(十二) 字符流 Reader和 Writer 一.介绍 涉及到文件(如果是纯文本文件形式)操作时,Java除了提供 FIle(文件和目录路径名的抽象表示形式) 和 FileDescri ...

  9. Python CSV Reader/Writer 例子--转载

    CSV(comma-separated values) 是跨多种形式导入导出数据的标准格式,比如 MySQL.Excel. 它以纯文本存储数和文本.文件的每一行就代表一条数据,每条记录包含了由逗号分隔 ...

随机推荐

  1. CentOS 下 LVS集群( 可能更新 )

    lvs-nat模型构建 假设测试环境:使用IP172.16.16.16. 需要A.B俩台Centos6.5虚拟机.提前关闭selinux 两台真实服务器的IP分别是192.168.1.1.192.16 ...

  2. Package gp in the OpenCASCADE

    Package gp in the OpenCASCADE eryar@163.com China 一.简介 Introduction to Package gp gp是几何处理程序包(Geometr ...

  3. VS 添加Snippets

    Code Snippet 下载文件: propfull.7z copy到C:\Users\哲\Documents\Visual Studio 2013\Code Snippets\Visual C#\ ...

  4. poj 2385Apple Catching(简单dp)

    /* 题意: 有两棵苹果树,每一棵苹果树每一秒间隔的掉落下来一个苹果,一个人在树下接住苹果,不让苹果掉落! 人在两棵树之间的移动是很快的!但是这个人移动的次数是有限制的,问最多可以接住多少个苹果! 思 ...

  5. 总结整理 -- ruby系列

    基础学习 ruby -- 基础学习(一)项目文件夹说明 ruby -- 基础学习(二) 外键配置实现级联删除 ruby -- 基础学习(三)设置中国时区时间 ruby -- 基础学习(四)TimeDa ...

  6. Docker - Docker国内镜像的配置及使用

    Docker国内镜像 DaoCloud - Docker加速器 阿里云 - 开发者平台 微镜像 - 希云cSphere 镜像广场 - 时速云 灵雀云 网易蜂巢 阿里云的Docker加速器 阿里云 - ...

  7. Filter Effects - 使用 CSS3 滤镜处理图片

    CSS3 Filter(滤镜)属性提供了提供模糊和改变元素颜色的功能.CSS3 Fitler 常用于调整图像的渲染.背景或边框显示效果.这里给大家分享的这个网站,大家可以体验下 CSS3 对图片的处理 ...

  8. linux专题一之文件归档和压缩(tar、file、zip)

     本文主要从以下几个方便来说明文件的归档和压缩,同时比较几种不同压缩方法的压缩比率及特点. 文件归档命令tar,tar.gz源码包的安装管理 创建tar包-解压-查询tar包内容 zip命令的用法 为 ...

  9. 【原创】Kakfa message包源代码分析

    笔者最近在研究Kafka的message包代码,有了一些心得,特此记录一下.其实研究的目的从来都不是只是看源代码,更多地是想借这个机会思考几个问题:为什么是这么实现的?你自己实现方式是什么?比起人家的 ...

  10. 改进网站设计的免费jQuery插件Top 7

    Animate Scroll.js是一个简单的jQuery插件,它用来为滚动增加延迟效果.同时你还可以自定义滚动样式(30多种滚动效果)和滚动速度,还有一个可以操纵”滚动结束位置”的”padding” ...