您的位置:首页 > 编程语言 > Java开发

JavaIO-字符流

2015-05-02 13:58 344 查看
12.3.2 字符流(1)
在程序中一个字符等于两个字节,那么Java提供了Reader和Writer两个专门操作字符流的类。
1.字符输出流Writer
Writer本身是一个字符流的输出类,此类的定义如下:
public abstract class Writer  
extends Object  
implements Appendable, Closeable, Flushable

此类本身也是一个抽象类,如果要使用此类,则肯定要使用其子类,此时如果是向文件中写入内容,应该使用FileWriter的子类。Wirter类的常用方法如表12-5所示。
表12-5 Writer类的常用方法

序 号

方 法

类 型

描 述

1
public abstract void close()

hrows IOException

普通
关闭输出流

2
public void write(String str)

throws IOException

普通
将字符串输出

3
public void write(char[] cbuf)

throws IOException

普通
将字符数组输出

4
public abstract void flush()

throws IOException

普通
强制性清空缓存

FileWriter类的构造方法定义如下:
public FileWriter(File file) throws IOException

U提示:关于Appendable接口的说明。
在Writer类中除了实现Closeable和Flushable两个接口之外,还实现了一个Appendable接口,此接口定义如下:
public interface Appendable{  
    Appendable append(CharSequence csq) 
throws IOException ;  
    Appendable append(CharSequence csq,
int start,int end) throws IOException ;  
    Appendable append(char c) throws IOException  
}

此接口表示的是内容可以被追加,接收的参数是CharSequence,实际上String类就实现了此接口,所以可以直接通过此接口的方法向输出流中追加内容。
范例:向文件中写入数据
package org.lxh.demo12.chariodemo;  
import java.io.File;  
import java.io.FileWriter;  
import java.io.Writer;  
public class WriterDemo01 {  
    public static void main(String[] args)
throws Exception { // 异常抛出,  
不处理  
        // 第1步:使用File类找到一个文件  
        File f = new File("d:" + File.
separator + "test.txt");// 声明File  
对象  
        // 第2步:通过子类实例化父类对象  
        Writer out = null;               
// 准备好一个输出的对象  
        out = new FileWriter(f);         
// 通过对象多态性,进行实例化  
        // 第3步:进行写操作  
        String str = "Hello World!!!";   
// 准备一个字符串  
        out.write(str);                 
// 将内容输出  
        // 第4步:关闭输出流  
        out.close();                  
// 关闭输出流  
    }  
}

整个程序与OutputStream的操作流程并没有什么太大的区别,唯一的好处是,可以直接输出字符串,而不用将字符串变为byte数组之后再输出。
程序运行结果:



12.3.2 字符流(2)

2.使用FileWriter追加文件的内容

在使用字符流操作时,也可以实现文件的追加功能,直接使用FileWriter类中的以下构造即可实现追加:
public FileWriter(File file,
boolean append) throws IOException

将append的值设置为true,表示追加。
范例:追加文件内容
package org.lxh.demo12.chariodemo;  
import java.io.File;  
import java.io.FileWriter;  
import java.io.Writer;  
public class WriterDemo02 {  
    public static void main(String[] args)
throws Exception {   // 异常抛出,  
不处理  
        // 第1步:使用File类找到一个文件  
        File f = new File("d:" + File.
separator + "test.txt");  // 声明File  
对象  
        // 第2步:通过子类实例化父类对象  
        Writer out = null;               
// 准备好一个输出的对象  
        out = new FileWriter(f,true);    
// 通过对象多态性进行实例化  
        // 第3步:进行写操作  
        String str = "\r\nLIXINGHUA\r\nHello
World!!!" ; // 准备一个字符串  
        out.write(str); // 将内容输出  
        // 第4步:关闭输出流  
        out.close();                
// 关闭输出流  
    }  
}

程序运行结果:


3.字符输入流Reader
Reader是使用字符的方式从文件中取出数据,Reader类的定义如下:

public abstract class Reader  
extends Object  
implements Readable, Closeable

Reader本身也是抽象类,如果现在要从文件中读取内容,则可以直接使用FileReader子类。Reader类的常用方法如表12-6所示。
表12-6 Reader类的常用方法

序号

方 法

类型

描 述

1
public abstract void close()

throws IOException

普通
关闭输出流

2
public int read() throws IOException

普通
读取单个字符

3
public int read(char[] cbuf)

throws IOException

普通
将内容读到字符数组中,

返回读入的长度

FileReader的构造方法定义如下:
public FileReader(File file) throws FileNotFoundException

范例:从文件中读取内容
package org.lxh.demo12.chariodemo;  
import java.io.File;  
import java.io.FileReader;  
import java.io.Reader;  
public class ReaderDemo01 {  
    public static void main(String[] args) 
throws Exception {   // 异常抛出,  
不处理  
        // 第1步:使用File类找到一个文件  
        File f = new File("d:" + File.
separator + "test.txt");// 声明File  
对象  
        // 第2步:通过子类实例化父类对象  
        Reader reader = null;             
// 准备好一个输入的对象  
        reader = new FileReader(f);      
// 通过对象多态性进行实例化  
        // 第3步:进行读操作  
        char c[] = new char[1024];       
// 所有的内容读到此数组中  
        int len = reader.read(c);       
// 将内容输出  
        // 第4步:关闭输入流  
        reader.close();                  
// 关闭输入流  
        System.out.println("内容为:" + 
new String(c, 0, len));  
                                       
// 把char数组变为字符串输出  
    }  
}


12.3.2 字符流(3)

程序运行结果:
内容为:Hello World!!!  
LIXINGHUA  
Hello World!!!  
LIXINGHUA  
Hello World!!!


如果此时不知道数据的长度,也可以像之前操作字节流那样,使用循环的方式进行内容的读取。

范例:使用循环的方式读取内容

package org.lxh.demo12.chariodemo;  
import java.io.File;  
import java.io.FileReader;  
import java.io.Reader;  
public class ReaderDemo02 {  
    public static void main(String[] args) 
throws Exception {   // 异常抛出,  
不处理  
        // 第1步:使用File类找到一个文件  
        File f = new File("d:" + File.
separator + "test.txt");// 声明File  
对象  
        // 第2步:通过子类实例化父类对象  
        Reader reader = null;            
// 准备好一个输入的对象  
        reader = new FileReader(f);       
// 通过对象多态性进行实例化  
        // 第3步:进行读操作  
        int len = 0;                     
// 用于记录读取的数据个数  
        char c[] = new char[1024];       
// 所有的内容读到此数组中  
        int temp = 0;                      
// 接收读取的每一个内容  
        while ((temp = reader.read()) != -1) {  
            // 将每次的读取内容给temp变量,
如果temp的值不是-1,则表示文件没有读完  
            c[len] = (char) temp;  
            len++;  
        }  
        // 第4步:关闭输入流  
        reader.close();                         // 关闭输入流  
        System.out.println("内容为:" + new String(c, 0, len));  
    }  
}


程序运行结果:
内容为:Hello World!!!  
LIXINGHUA  
Hello World!!!  
LIXINGHUA  
Hello World!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: