专栏首页钟绍威的专栏简单的Writer和ReaderWriter的主要方法Writer工作原理Reader的主要方法readLine():String

简单的Writer和ReaderWriter的主要方法Writer工作原理Reader的主要方法readLine():String

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释放出去

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 多线程编程:阻塞、并发队列的使用总结

    最近,一直在跟设计的任务调度模块周旋,目前终于完成了第一阶段的调试。今天,我想借助博客园平台把最近在设计过程中,使用队列和集合的一些基础知识给大家总结一下,方便...

    赵小忠
  • 谁说 Java 要过时?2017年Java 大事件一览及未来前瞻

    在过去的一年中,Java 历经了许多变化。在今年年初,Java EE 处于一个不确定的状态,Java 9 版本也推迟了它的发布日期。在 2016 年的 Java...

    企鹅号小编
  • Java8新特性第3章

    Stream作为Java8的新特性之一,他与Java IO包中的InputStream和OutputStream完全不是一个概念。Java8中的Stream是对...

    企鹅号小编
  • 单点登录系统实现

    单点登录系统实现基于SpringBoot 今天的干货有点湿,里面夹杂着我的泪水。可能也只有代码才能让我暂时的平静。通过本章内容你将学到单点登录系统和传统登录系统...

    企鹅号小编
  • 从插件重构看如何提升测试质量与效率

    几个月前技术侧发起了一轮手机管家小火箭的重构,目的是为了更好地梳理小火箭的代码架构逻辑,方便以后更好地提高开发效率和开发质量。

    腾讯移动品质中心TMQ
  • Java设计模式之模板方法设计模式(银行计息案例)

           不知道为什么,这几天对Java中的设计模式非常感兴趣,恰巧呢这几天公司的开发任务还不算太多,趁着有时间昨天又把模板方法模式深入学习了一下,做了一个...

    赵小忠
  • java项目 远程debug

    AVA项目无法像PHP那样可以随时修改文件内容进行调试,调试可以借助eclipse,本地代码的话很容易在本地debug,但如果代码已经打包部署在linux上呢?...

    千往
  • java匿名内部类

    show the code : package com.test.jwen.httpApiAuto; public class AInter { publ...

    千往
  • 如何使用线程锁来提高多线程并发效率

           今天对synchronized关键字的用法又有了更高一层的理解,特此记录一下。        一直对自己设计的多通道做单不是狠满意,并发效率低下。...

    赵小忠
  • java array to list

    背景 想把数组转为list,使用list的判断元素是否存在的方法,结果发现一个坑,int类型的数组失败了  步骤 public static void main...

    千往

扫码关注云+社区

领取腾讯云代金券