Java中的输入与输出流详解(6)

我们已经介绍了字节流类并详细地讲解了字节流。虽然字节流的功能十分强大,它能直接或间接地处理任何数据类型的输入和输出操作,但是它却不能直接操作16位的Unicode字符。这时提供直接的字符输入和输出就显得非常有必要了。

1)、如何读取Unicode字符

Reader和Writer类处在字符流类的顶层,是所有字符流类的基类。同时它们都是抽象的,它们仅提供了基本的函数类型,没有具体实现,所以不能直接生成对象。要通过其子类来生成所需的对象,同时必须重写Reader和Writer类中的方法。下面是它们的主要方法:

Reader方法:

>read():从输入流中读取下一个字符,并以int类型返回。如遇输入流的末尾则返回-1

>read(char[] buffer):读取长度为buffer.length的字符到buffer中,返回本次读取的字符数;

>read(char[] buffer , int off , intlen):同上,写入buffer中从下标off开始的位置,并返回本次读取的字符数。

>close():关闭当前的输入流;

>skip(long n):跳过n个字符,返回实际跳过的字符数;

>mark(int readlimit):在输入流的当前位置设置标记,该标记在从流中读取readlimit个字符前都保持有效;

>markSupported():测试调用的流是否支持mark()/reset();

>ready():测试输入流是否准备好读取字符;

>reset():重置输入指针到先钱设定的标记处。

Writer方法:

>write(int c):将指定的字符c作为数据写入输出流,下面是对其的重写:

>write(char[]buffer):将buffer中长度为buffer.length个字符的数据写入输出流;

>write(char[] buffer , int off , intlen):同上,将buffer中从下标off开始的长度为len个字符的数据写入输出流;

>write(String str):将字符串str写入输出流;

>write(String str , intoff , int len):将字符串中以off为起点的len个字符写入输出流;

>close():关闭当前的输出流,同时释放相关的系统资源;

>flush():刷新输出流。

上述方法在调用时如果出现错误,将会跑出一个IOException异常。

2)、读取字符文件

FileReader和FileWriter类分别继承了Reader和Writer类,它们重写了父类中的所有方法,主要用于字符文件的读写操作。FileReader类用于读取字符文件的内容,每次赌气一个字符或一个字符数组。FileWriter类用于写入字符文件的内容,每次写入一个字符或一个字符串。

FileReader类的两个常用的构造函数如下:

> FileReader(StringfilePath)//filePath指被打开并被读取数据的文件的全路径

>FileReader(FilefileObj)//fileObj指被打开并被读取数据的文件

下面的实例讲解了FileReader的使用方法:

public static voidmain(String[] args) {
        try {
            FileReader fr = newFileReader("D:\\桌面\\桌面\\安卓开发工具\\学习笔记\\test1.txt");
            //每次读取一个字符
            char[] c = new char[1];
            while (fr.read(c) != -1)               
                System.out.print(new String(c));
            fr.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

FileWriter类常用的构造函数如下:

>FileWriter(String filePath)

>FileWriter(String filePath , boolean append)

>FileWriter(String fileObj)

FileWriter对象的创建不依赖文件是否存在。如果文件不存在,FileWriter会在打开输出文件之前创建它。如果文件存在,则打开它并准备写入内容。下面的实例讲解了如何从文件中读取数据并写入另一个文件:

public class test {
    public static void main(String[] args) {
        int i;
        FileReader fr;
        FileWriter fw;
        try {
            fr = new FileReader("D:\\桌面\\桌面\\安卓开发工具\\学习笔记\\test01.txt");
        } catch (Exception e) {
            System.err.println("文件未找到");
            return;
        }
        try {
            fw = new FileWriter("D:\\桌面\\桌面\\安卓开发工具\\学习笔记\\test02.txt");
        }catch (Exception e) {
            System.err.println(e);
            return;
        }
        try {
            i = fr.read();//读取数据
            while (i != -1) {             
                fw.write(i);
                i = fr.read();
            }
            fr.close();
            fw.close();
            System.err.println("运行完毕");
        } catch (Exception e) {
            System.err.println(e);
        }
    }
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/0717ce79f1828b16de0c05fb901ec02e.html