黑马程序员-Java 字符流的使用简明

来源:互联网 发布:微信公众号java源码 编辑:程序博客网 时间:2024/06/05 02:04

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

字符流

Writer
—OutputStreamWriter
—BufferedWriter
—FileWriter
Reader
—InputStreamReader
—BufferedReader
—FileReader

JAVA中流的概念,是一个挺抽象的概念。通俗的理解可以是,一条水管,水管的一头连接水的源头和另一端连接目的地,这样水就可以流向目的地了。在计算机中,源头和目的可以是计算机中的内存,硬盘中的文件,网络上的设备等。

JAVA中对流的操作分了两类:字节流和字符流。对应这4个抽象类,字符流的WriterReader,字节流的 InputStreamOutputStream。Writer子类下面有两个比较常用的InputStreamReader和BuferedReader,InputStreamReader类实现字节流通向字符流。BufferedReader是加入了缓冲区的字符类,效率更高了。

Writer

Writer是一个写入字符流的抽象类,子类OutputStreamWriter实现了字符流转向字节流。OutputStreamWriter有一个用于写入文件的便捷类FileWriter,FileWriter的构造函数参数是一个要写入数据的文件,如果文件不存在或无法打开会抛出IOException异常。

public Demo{    public static void main(String[]args)throws IOException    {        FileWriter fw = new FileWriter("demo.txt");        fw.write("hello,heima");        fw.close();    }}

通过write方法向缓冲区写入数据FileWriter的write方法有如下几种:
write()
write(char[]buf)
write(String str)
write(String str,int index,int len)
write(char[]buf,int index,int len)

Reader

读取字符流的抽象类,该类的read()方法一次读取一个字符。如同Writer类一样,该类也有一个用于将字节流转换成字符流的子类:InputStreamReader,可以使用charset指定字符集或使用默认编码将字节流解码为字符。InputStreamReader有一个子类对应OutputStream的FileWriter,FileReader类。用于读取字符文件的便捷类。

import java.io.*;class WriterDemo{    public static void main(String[] args)throws IOException     {        FileReader fr = new FileReader("demo_text.txt");        FileWriter fw = new FileWriter("demo.txt");        int ch = 0;        while((ch = fr.read())!= -1)        {            fw.write(ch);        }        fw.close();    }}

FileReader的read()方法,一次读取一个字符,读到末尾返回-1。在Window系统中换行是用’\r’,’\n’两个字符连在一起表示的。

BufferedReader类

实现高效的读取的类,从字符输入流中读取文本,并缓冲起来。
该类提供了一个readLine()方法,一次读取一个字符,直到读取完一行后返回字符串。

FileReader fr = new FileReader("demo_text.txt");    BufferedReader bfr = new BufferedReader(fr);    String line = null;    while((line = bfr.readLine())!=null)    {        System.out.println(line);    }

BufferedWriter类

缓冲字符流后写入字符流。默认缓冲区大小8*1024B。将一次性读取默认缓冲区大小的数据到缓冲区。后面调用write()是对缓冲区中的数据进行写入,需要自己手动进行调用flush()刷新。该类还提供了一个newLine()方法,提供所在系统自己的换行符概念。如在windows系统中是\r \n。而在linux系统中是\n。

    FileReader fr = new FileReader("demo_text.txt");    FileWriter fw = new FileWriter("demo.txt");    BufferedReader bfr = new BufferedReader(fr);    BufferedWriter bfw = new BufferedWriter(fw);    String line = null;    while((line = bfr.readLine())!=null)    {        bfw.write(line);        bfw.newLine();        bfw.flush();    }    bfr.close();    bfw.close();

InputStreamReader

使用指定的字符集解析读取的字节,一般使用为了提高效率,会把InputStreamReader对象包含在BufferedReader中,如:BufferedReader(new InputStreamReader(System.in);使用控制台输入来构建inputStreamReader对象后传给BbufferedReader构建对象。然后就像对待字符流一样对待键盘录入的字节流了。

    BufferedReader buf =     new BufferedReader(new InputStreamReader(System.in));    String line = null;    line = buf.readLine();    System.out.println(line);  

OutputStreamWriter

是字符流转换成字节流的类,每次调用write都会调用编码转换器,所以,将OutputStreamWriter包装到BufferedWriter中可以避免频繁调用编码转换器。

BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));BufferedWriter buw =new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:\\test_demo.txt")));    String line = null;    while((line = buf.readLine())!=null)    {        if("886".equals(line))            break;        buw.write(line);        buw.newLine();        buw.flush();    }    buf.close();    buw.close();  

读取键盘录入的内容后写入D盘的test_demo.txt文件。

0 0
原创粉丝点击