zoukankan      html  css  js  c++  java
  • 简单的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=intStringchar
    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中没有
    此时可以自己加上换行符,也可以用System.out.prinln(xxxxx)

    readLine()的原理

    (回车)是回到行首
    (换行)是到下一行去,但是不是行首
    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)'
    '&&hasNext!=(int)'
    '){list.add((char)hasNext);}
                    else if(hasNext==(int)'
    '){continue;}
                    else{break;}
                }
            for(char a:list){
                line=a+line;
                }
            return line;
            }
        public void close()throws IOException{
            this.filereader.close();
            }
        }

    复制的原理

    将文本中的数据缓存到Reader流中,再新建一个文件,用Writer释放出去

  • 相关阅读:
    Nova官方资料入口处
    LeetCode 有效的数独
    LeetCode 两数之和
    LeetCode 移动零
    安装OpenStack Queens版本的教程推荐
    删除排序数组中的重复项
    (转载)OpenStack client 调用分析
    (转载)基于Linux C的socket抓包程序和Package分析
    Maven的具体使用和优点
    关于 Javascript 学习,有哪些好的博客或者网站推荐?
  • 原文地址:https://www.cnblogs.com/wewill/p/5588762.html
Copyright © 2011-2022 走看看