Reader与Writer的IO操作

来源:互联网 发布:2016淘宝怎么刷单 编辑:程序博客网 时间:2024/05/30 23:02

Reader与Writer:用来处理“字符流”(文本文件),与字节输入输出流类似,Reader和Writer建立了一条通往字符文件的通道,提供了相应的读写方法。
下面介绍两种集成了Reader和Writer的输入输出字符流,


Reader提供的一些方法:

public int read();读取单个字符

public int read(char[] cbuf);从流中读取字符并写入字符数组中

public int read(char[] cbuf,int off,int len);从流中读取字符并写入字符数组中(off 表示数组下标,len表示读取的字符数)

public long skip(long n);从输入流中最多向后跳n个字符

public boolean ready();判断流是否做好读的准备

public void reset();重定位输入流

public void close();关闭流

Writer提供的一些方法:

public void writer(int c);将单一字符输出到流中

public void writer(String str);将字符串str输出到流中

public void writer(char[] cbuf);将字符数组输出到流

public void write(char[] cbuf,int off,int len);将字符数组按指定的格式输出(off表示字符数组下标,len表示写入的字符数)到流中

public void flush();将缓冲区的数据写到文件中

public void close();关闭流

一:

1.FileReader:文件字符输入流,继承自InputStreamReader类;而InputStreamReader又继承自Reader所以,这两个类均可使用Reader所提供的方法

构造方法:

public FileReader(String name) 根据文件名称创建一个可读取的输入流对象。

2.FileWriter:文件字符输出流,继承自OutputStreamWriter类,而OutputStreamWriter又继承自Writer所以,这两个类均可使用Writer所提供的方法;

构造方法:

public FileWriter(String name)根据所给文件名创建一个可供写入字符数据的输出流对象,原先的文件会被覆盖。

public FileWriter(String name,Boolean a)同上,如果a为true时,则会将数据追加在原先文件后面。


public int read();读取单个字符

public int read(char[] cbuf);从流中读取字符并写入字符数组中

public int read(char[] cbuf,int off,int len);从流中读取字符并写入字符数组中(off 表示数组下标,len表示读取的字符数)

readLine();读取一行字符串

public static void main(String[] args){        String path1 = "D:\\abc.txt";        String path2 = "D:\\abc2.txt";        FileReader reader = null;        FileWriter writer = null;        //读取文件操作        try {            reader = new FileReader(path1);            writer = new FileWriter(path2);            //定义字符数组大小为1024            char[] c = new char[1024];            int ch = 0;            //读取大小为c长度的内容,赋值给ch。当返回-1时,说明数据已经读完            while((ch = reader.read(c)) != -1){                System.out.print(new String(c)+"\n");                //写入,每次将c写入到指定文件,长度为c,起始偏移0                writer.write(c,0,ch);            }        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }finally {            try {                if(reader != null)                    reader.close();                if(writer != null)                    writer.close();            } catch (IOException e) {                e.printStackTrace();            }        }//        //直接写入文件//        try {//            writer = new FileWriter(path2);//            //直接将字符串写入//            writer.write(new String("12312321"));//        } catch (IOException e) {//            e.printStackTrace();//        }finally {//            if(writer != null){//                try {//                    writer.close();//                } catch (IOException e) {//                    e.printStackTrace();//                }//            }//        }    }

结果:

控制台打印结果


本地文件及内容


二:

BufferedReader:缓冲字符输入流

构造方法:

public BufferedReader(Reader in);创建缓冲区字符输入流

public BufferedReader(Reader in,int size);创建缓冲区字符输入流,大小为size

一些重要的方法:

public int read();读取单个字符

public int read(char[] cbuf);从流中读取字符并写入字符数组中

public int read(char[] cbuf,int off,int len);从流中读取字符并写入字符数组中(off 表示数组下标,len表示读取的字符数)

public void skip(long n);跳过n个字符不读取

readLine();读取一行字符串

public void close();关闭流


BufferedWriter:缓冲字符输出流

public BufferedWriter(Writer in);创建缓冲区字符输入流

public BufferedWriter(Writer in,int size);创建缓冲区字符输入流,大小为size

一些重要的方法:

public void writer(int c);将单一字符写入缓冲区

public void write(char[] cbuf,int off,int len);将字符数组按指定的格式写入输出到缓冲区中(off表示字符数组下标,len表示写入的字符数)

public void writer(String str,int off,int len);写入字符串(off表示下标,len表示写入的字符数)

public void newLine();写入回车换行字符

public void flush();将缓冲区的数据写到文件中

public void close();关闭流

public static void main(String[] args){    String path1 = "D:\\abc.txt";    String path2 = "D:\\abc2.txt";    BufferedReader reader = null;    BufferedWriter writer = null;    FileReader reader1 = null;    FileWriter writer1 = null;    try {        reader1 = new FileReader(path1);        writer1 = new FileWriter(path2);        reader = new BufferedReader(reader1);        writer = new BufferedWriter(writer1);        String str = null;        //BufferedReader比FileReader提供了readLine方法,每次读一行,省去了读一个字节/字符数组大小的麻烦        while((str = reader.readLine()) != null){            writer.write(str);            writer.newLine();            //关于flush的问题,每次讲缓冲区的数据写入到文件中,如果不手动调用,那么每次缓冲区满了以后,会自动的写入一次。            writer.flush();        }    } catch (FileNotFoundException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();    }finally {        try {            if(writer != null)                writer.close();            if(reader != null)                reader.close();            if(writer1 != null)                writer1.close();            if(reader1 != null)                reader1.close();        } catch (IOException e) {            e.printStackTrace();        }    }}

结果:

控制台打印结果

本地文件及文件内容



1 0
原创粉丝点击